Це виклик для гольфу з кодом, за допомогою якого вам потрібно розробити програму, яка діє як квінка або кволка, яка модифікує себе, щоб ілюструвати машинне навчання.
Фон
Існує основна програма штучного інтелекту під назвою "гра в панголін", яка описана тут . Основні ідеї полягають у тому, що програма при першому запуску запитує:
Добре, будь ласка, придумайте щось
Це панголін?
Ви можете відповісти:
Так
У такому випадку він говорить:
Добре. Це було так легко.
Або якщо ні, це говорить:
Ой. Ну ви виграєте тоді - Що ви думали?
Ви можете сказати:
собака
На яке б це сказало
Будь ласка, дайте мені питання про собаку, щоб я міг сказати різницю між собакою і панголіном
ви можете відповісти
Чи їсть мурах?
Потім він запитав:
Яка відповідь на собаку?
До якого ви б сказали
ні
І сказало б
Спасибі
Наступного разу, коли він запускається, він би задав питання вище, і створив бинарне дерево таких питань.
Змагання
Досить фону. Це завдання полягає в написанні самомодифікуючої програми панголіну. Правила такі:
Вихід програми (як описано вище) повинен бути
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діалог).Стандартні лазівки виключаються.