Это задача игры в гольф, в которой вам нужно разработать программу, которая действует как квин или квин, которая изменяет себя, чтобы проиллюстрировать машинное обучение.
Задний план
Существует базовая программа искусственного интеллекта под названием «игра в ящеров», которая описана здесь . Основная идея заключается в том, что программа при запуске в первый раз спрашивает:
Хорошо, пожалуйста, подумай
Это ящер?
Затем вы можете ответить либо:
да
В этом случае он говорит:
Хорошо. Это было так легко.
Или, если нет, он говорит:
Ой. Ну, тогда ты выиграл - О чем ты думал?
На что вы можете сказать:
собака
На что бы он сказал
Пожалуйста, дайте мне вопрос о собаке, чтобы я мог понять разницу между собакой и ящером
ты можешь ответить
Есть ли муравьи?
Было бы тогда спросить:
Какой ответ для собаки?
На что бы вы сказали
нет
И это сказал бы
Благодарность
В следующий раз, когда он запустится, он задаст вопрос выше и создаст двоичное дерево таких вопросов.
Соревнование
Достаточно фона. Задача состоит в том, чтобы написать самоизменяющуюся программу для ящеров. Правила следующие:
Вывод программы (как описано выше) должен быть
STDERR. Окончательный ответ всегда будет «Хорошо. Это было так просто». или "Спасибо". После этого он должен вывести либо текущую версию программы, либо новую версию программы, в которую включен вопросSTDOUT. Ни один ответ, написанный на языке, не поддерживающем записьSTDOUTи /STDERRили чтение,STDINне будет действительным.Другими словами, в UNIX вы можете вызвать программу следующим образом:
пример:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- Программа должна использовать точно указанные подсказки (поскольку сокращение подсказок не показывает навыка). Подсказки (без кавычек и где подставляется% s) следующие:
список:
"OK, please think of something"
"Is it %s?"
"Good. That was soooo easy."
"Oh. Well you win then -- What were you thinking of?"
"Please give me a question about %s, so I can tell the difference between %s and %s"
"What is the answer for %s?"
"Thanks"
Ожидая ответов «да / нет», ваша программа должна принять
yилиyesв любом случае «да»,nилиnoв любом случае «нет». То, что вы делаете с несоответствующими входами, зависит от вас. Например, вы можете принять любой ответ, который начинается сyилиYкак «да», а любой другой - как «нет».Вы можете предположить, что названия поставляемых вещей и вопросов состоят только из букв ASCII, цифр, пробелов, дефисов, вопросительных знаков, запятых, точек с запятой, двоеточий и точек с запятой, т.е. они соответствуют следующему регулярному выражению
^[-?,.;: a-zA-Z]+$. Если вы можете справиться с чем-то большим (особенно с кавычками на выбранном вами языке), вы станете самодовольным, но не наберете лишних очков.Ваша программа не может прочитать или записать любой файл ( за исключением
STDIN,STDOUTиSTDERR), или из сети; в частности, он не может ни читать, ни записывать свой собственный код с диска. Его состояние должно быть сохранено в самом коде программы.Когда программа запущена и правильно угадывает ответ, она должна работать точно как квинна, то есть она должна писать
STDOUTточно в свой собственный код, без изменений.Когда программа запускается и неправильно угадывает ответ, она должна закодировать предоставленный новый вопрос и ответ в своем собственном коде и записать его
STDOUTв своем собственном коде, чтобы она могла различать свое первоначальное предположение и предоставленный новый объект в дополнение к различению всех ранее заданных объектов.Вы должны быть в состоянии справиться с несколькими последовательными запусками программного обеспечения, чтобы оно узнало о многих объектах. Смотрите здесь примеры нескольких прогонов.
Пробеги испытаний приведены в ссылке в голове (очевидно , охватывающие только
STDINиSTDERRдиалог).Стандартные лазейки исключены.