Dies ist eine Code-Golf-Herausforderung, bei der Sie ein Programm entwickeln müssen, das sich wie ein Quine verhält oder das sich selbst modifiziert, um das maschinelle Lernen zu veranschaulichen.
Hintergrund
Es ist ein grundlegendes künstliche Intelligenz Programm ‚das pangolin Spiel‘ genannt , die beschrieben wird , hier . Die Grundidee ist, dass das Programm beim ersten Start fragt:
OK, bitte denken Sie an etwas
Ist es ein Pangolin?
Sie können dann entweder antworten:
Ja
In welchem Fall heißt es:
Gut. Das war soooo einfach.
Oder wenn nicht, heißt es:
Oh. Na dann gewinnst du - woran hast du gedacht?
Zu dem könnte man sagen:
ein Hund
Zu dem würde es sagen
Bitte geben Sie mir eine Frage zu einem Hund, damit ich den Unterschied zwischen einem Hund und einem Pangolin erkennen kann
du könntest antworten
Frisst es Ameisen?
Es würde dann fragen:
Was ist die Antwort für einen Hund?
Zu dem würdest du sagen
Nein
Und es würde sagen
Vielen Dank
Wenn es das nächste Mal ausgeführt wird, würde es die obige Frage stellen und einen binären Baum solcher Fragen aufbauen.
Die Herausforderung
Genug vom Hintergrund. Diese Herausforderung besteht darin, ein selbstmodifizierendes Pangolin-Programm zu schreiben. Die Regeln sind wie folgt:
Die Programmausgabe (wie oben beschrieben) sollte an sein
STDERR
. Die endgültige Antwort lautet immer "Gut. Das war soooo einfach." oder "Danke". Danach sollte entweder die aktuelle Version des Programms oder eine neue Version des Programms ausgegeben werden, die die Frage enthältSTDOUT
. Keine Antwort, die in einer Sprache verfasst wurde, die das SchreibenSTDOUT
undSTDERR
Lesen nicht unterstützt,STDIN
ist gültig.Mit anderen Worten, unter UNIX können Sie das Programm folgendermaßen aufrufen:
Beispiel:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- Das Programm muss genau die angegebenen Eingabeaufforderungen verwenden (da das Verkürzen der Eingabeaufforderungen keine Fertigkeiten zeigt). Die Eingabeaufforderungen lauten (ohne Anführungszeichen und wobei% s ersetzt wird) wie folgt:
Liste:
"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"
Wenn erwartet Ja / Nein - Antworten, soll Ihr Programm übernehmen
y
oderyes
in jedem Fall für ‚Ja‘, undn
oderno
in jedem Fall für ‚Nein‘. Was Sie mit nicht konformen Eingaben tun, liegt bei Ihnen. Zum Beispiel könnten Sie sich dafür entscheiden, eine Antwort zu nehmen, die mity
oderY
als "Ja" beginnt , und alles andere als "Nein".Sie können davon ausgehen, dass die Namen der gelieferten Dinge und der Fragen nur aus ASCII-Buchstaben, -Zahlen, -Leerzeichen, -Trennstrichen, -Fragezeichen, -Kommas, -Punkten, -Doppelpunkten und -Semikolons bestehen, dh sie stimmen mit dem folgenden regulären Ausdruck überein
^[-?,.;: a-zA-Z]+$
. Wenn Sie mehr als das bewältigen können (insbesondere die Anführungszeichen in der von Ihnen gewählten Sprache), werden Sie selbstgefällig, erhalten aber keine zusätzlichen Punkte.Ihr Programm kann eine beliebige Datei nicht lesen oder schreiben (ohne
STDIN
,STDOUT
undSTDERR
), oder aus dem Netz; Insbesondere kann er keinen eigenen Code von der Festplatte lesen oder schreiben. Sein Zustand muss im Programmcode selbst gespeichert werden.Wenn das Programm ausgeführt wird und die Antwort richtig errät, muss es genau wie ein Quine funktionieren, dh es muss
STDOUT
unverändert in genau seinen eigenen Code schreiben .Wenn das Programm ausgeführt wird und die Antwort falsch errät, muss es die bereitgestellte neue Frage und Antwort in seinem eigenen Code codieren und in seinen eigenen Code schreiben
STDOUT
, damit es in der Lage ist, zwischen seiner ursprünglichen Vermutung und dem bereitgestellten neuen Objekt zu unterscheiden Neben der Unterscheidung zwischen allen zuvor gegebenen Objekten.Sie müssen in der Lage sein, mehrere sequenzielle Läufe der Software zu bewältigen, damit sie viele Objekte erkennt. Sehen Sie hier Beispiele für mehrere Läufe.
Testläufe finden Sie am Link im Kopf (natürlich nur im
STDIN
undSTDERR
-Dialog).Standardlücken sind ausgeschlossen.