Цель этой задачи - написать программу, способную угадать слово за наименьшее количество попыток. Он основан на концепции телешоу Lingo ( http://en.wikipedia.org/wiki/Lingo_(US_game_show) ).
правила
Учитывая длину слова, переданного в качестве первого аргумента в командной строке, программа проигрывателя имеет пять попыток угадать слово, записав предположение на его стандартный вывод, за которым следует один \n
символ.
После предположения программа получает на свой стандартный ввод строку, за которой также следует один \n
символ.
Строка имеет ту же длину, что и слово для угадывания, и состоит из последовательности следующих символов:
X
: это означает, что данная буква отсутствует в слове угадать?
: это означает, что данная буква присутствует в слове угадать, но в другом местеO
: это означает, что письмо в этом месте было правильно угадано
Например, если слово угадать есть dents
, а программа отправляет слово dozes
, оно получит, OXX?O
потому что d
и s
правильно, e
неуместно, а так o
и z
нет.
Будьте внимательны, если буква присутствует в попытке угадать больше раз, чем в слове для угадывания, она не будет помечена как ?
и O
более раз, чем количество вхождений буквы в слове для угадывания. Например, если слово «угадать» есть, cozies
и программа отправляет tosses
, оно получит, XOXXOO
потому что есть только одно, s
чтобы найти.
Слова выбираются из списка английских слов. Если слово, отправленное программой, не является допустимым словом правильной длины, попытка считается автоматической неудачей, и X
возвращаются только слова.
Программа проигрывателя должна предполагать, что файл с именем wordlist.txt
и содержащим одно слово в строке присутствует в текущем рабочем каталоге и может быть прочитан при необходимости.
Предположения должны состоять только из буквенных букв нижнего регистра ( [a-z]
).
Другие сетевые или файловые операции для программы запрещены.
Игра заканчивается, когда O
возвращается строка, состоящая только из или после того, как программа сделала 5 попыток и не смогла угадать слово.
счет
Счет игры определяется по формуле:
score = 100 * (6 - number_of_attempts)
Так что, если слово правильно угадано с первой попытки, дается 500 очков. Последняя попытка стоит 100 очков.
Неспособность угадать слово дает ноль очков.
Яма
Программы игроков будут оцениваться путем попытки угадать 100 случайных слов для каждой длины слова от 4 до 13 символов включительно.
Случайный выбор слов будет сделан заранее, поэтому все записи должны будут угадывать одни и те же слова.
Победившая программа и принятый ответ будут теми, кто наберет наибольшее количество очков.
Программы будут запускаться на виртуальной машине Ubuntu с использованием кода по адресу https://github.com/noirotm/lingo . Реализации на любом языке принимаются до тех пор, пока предоставляются разумные инструкции по их компиляции и / или запуску.
Я предоставляю несколько тестовых реализаций в ruby в репозитории git, не стесняйтесь черпать вдохновение из них.
Этот вопрос будет периодически обновляться с рейтингом опубликованных ответов, чтобы претенденты могли улучшить свои записи.
Официальная итоговая оценка состоится 1 июля .
Обновить
Записи теперь могут предполагать наличие wordlistN.txt
файлов для ускорения чтения списка слов для текущей длины слова для N от 4 до 13 включительно.
Например, есть wordlist4.txt
файл, содержащий все четырехбуквенные слова, wordlist10.txt
содержащий все десятибуквенные слова и т. Д.
Результаты первого тура
На дату 2014-07-01 было подано три заявки со следующими результатами:
4 5 6 7 8 9 10 11 12 13 Total
./chinese-perl-goth.pl 8100 12400 15700 19100 22100 25800 27900 30600 31300 33600 226600
java Lingo 10600 14600 19500 22200 25500 28100 29000 31600 32700 33500 247300
./edc65 10900 15800 22300 24300 27200 29600 31300 33900 33400 33900 262600
** Rankings **
1: ./edc65 (262600)
2: java Lingo (247300)
3: ./chinese-perl-goth.pl (226600)
Все записи выполнялись последовательно, с явным победителем, являясь записью @ edc65 для C ++.
Все участники довольно классные. До сих пор я не мог даже победить @ Chinese-Perl-Goth.
Если будет представлено больше записей, будет проведена другая оценка. Текущие записи также могут быть улучшены, если вы чувствуете, что можете сделать лучше.