Мета цього завдання - написати програму, здатну відгадати слово за найменшу кількість спроб. Він заснований на концепції телешоу 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
повертаються лише s.
Програма програвача повинна припускати, що файл, wordlist.txt
що містить ім’я та містить одне слово на рядок, присутній у поточному робочому каталозі, і його можна прочитати за потреби.
Здогадки повинні складатися лише з алфавітних малих символів ( [a-z]
).
Жодні інші операції з мережею або файлами для програми не дозволені.
Гра закінчується, коли O
повертається лише рядок, до складу якої входить, або після того, як програма зробила 5 спроб і не змогла відгадати слово.
Оцінка балів
Оцінка гри задається формулою:
score = 100 * (6 - number_of_attempts)
Тож якщо слово правильно вгадано при першій спробі, дається 500 балів. Остання спроба коштує 100 балів.
Якщо слово не вгадується, це дає нульові бали.
Яма
Програми гравців будуть оцінені, намагаючись вгадати 100 випадкових слів на кожну довжину слова від 4 до 13 символів включно.
Вибір випадкового слова буде здійснено заздалегідь, тому всі записи повинні вгадати однакові слова.
Перемогла програма та прийнята відповідь буде тим, хто досяг найвищого балу.
Програми запускатимуться у віртуальній машині Ubuntu з використанням коду за адресою https://github.com/noirotm/lingo . Реалізація будь-якою мовою приймається до тих пір, поки не будуть надані розумні інструкції щодо їх складання та / або запуску.
Я пропоную кілька тестових реалізацій в рубіні в сховищі 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)
Всі записи виконувались послідовно, з чітким переможцем, це запис C ++ @ edc65.
Усі учасники конкурсу досить приголомшливі. Я поки що не міг навіть побити @ китайський-перл-гот.
Якщо подано більше записів, відбудеться інша оцінка. Поточні записи можна також покращити, якщо ви відчуваєте, що можете зробити краще.