Это задача игры в гольф, в которой вам нужно разработать программу, которая действует как квин или квин, которая изменяет себя, чтобы проиллюстрировать машинное обучение.
Задний план
Существует базовая программа искусственного интеллекта под названием «игра в ящеров», которая описана здесь . Основная идея заключается в том, что программа при запуске в первый раз спрашивает:
Хорошо, пожалуйста, подумай
Это ящер?
Затем вы можете ответить либо:
да
В этом случае он говорит:
Хорошо. Это было так легко.
Или, если нет, он говорит:
Ой. Ну, тогда ты выиграл - О чем ты думал?
На что вы можете сказать:
собака
На что бы он сказал
Пожалуйста, дайте мне вопрос о собаке, чтобы я мог понять разницу между собакой и ящером
ты можешь ответить
Есть ли муравьи?
Было бы тогда спросить:
Какой ответ для собаки?
На что бы вы сказали
нет
И это сказал бы
Благодарность
В следующий раз, когда он запустится, он задаст вопрос выше и создаст двоичное дерево таких вопросов.
Соревнование
Достаточно фона. Задача состоит в том, чтобы написать самоизменяющуюся программу для ящеров. Правила следующие:
Вывод программы (как описано выше) должен быть
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
диалог).Стандартные лазейки исключены.