Il s'agit d'un défi de code-golf dans lequel vous devez concevoir un programme qui agit comme un quine ou un quine qui se modifie pour illustrer l'apprentissage automatique.
Contexte
Il existe un programme d'intelligence artificielle de base appelé «le jeu du pangolin» qui est décrit ici . L'idée de base est que le programme lors de sa première exécution demande:
OK, pensez à quelque chose
Est-ce un pangolin?
Vous pouvez alors répondre soit:
Oui
Dans ce cas, il dit:
Bien. C'était tellement facile.
Sinon, il dit:
Oh. Eh bien, vous gagnez alors - À quoi pensiez-vous?
À laquelle vous pourriez dire:
un chien
À quoi il dirait
Veuillez me poser une question sur un chien, afin que je puisse faire la différence entre un chien et un pangolin
tu pourrais répondre
Mange-t-il des fourmis?
Il demanderait alors:
Quelle est la réponse pour un chien?
À laquelle vous diriez
non
Et ça dirait
Merci
La prochaine fois qu'il s'exécutera, il posera la question ci-dessus et construira un arbre binaire de ces questions.
Le défi
Assez de fond. Ce défi consiste à écrire un programme de pangolins auto-modifiant. Les règles sont les suivantes:
La sortie du programme (comme décrit ci-dessus) doit être vers
STDERR
. La réponse finale sera toujours "Bien. C'était tellement facile." ou "Merci". Après cela, il doit sortir soit la version actuelle du programme, soit une nouvelle version du programme qui incorpore la question àSTDOUT
. Aucune réponse écrite dans une langue qui ne prend pas en charge l'écritureSTDOUT
et /STDERR
ou la lectureSTDIN
ne sera valide.En d'autres termes, sous UNIX, vous pouvez appeler le programme comme ceci:
Exemple:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- Le programme doit utiliser exactement les invites spécifiées (car le raccourcissement des invites ne montre aucune compétence). Les invites sont (sans les guillemets et où% s est substitué) comme suit:
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"
Lorsque vous attendez des réponses oui / non, votre programme doit accepter
y
ouyes
dans tous les cas pour «oui» etn
ouno
dans tous les cas pour «non». Ce que vous faites avec des entrées non conformes dépend de vous. Par exemple, vous pourriez décider de prendre n'importe quelle réponse commençant pary
ouY
comme «oui», et toute autre chose comme non.Vous pouvez supposer que les noms des éléments fournis et les questions ne comprennent que des lettres ASCII, des chiffres, des espaces, des tirets, des points d'interrogation, des virgules, des points, des deux-points et des points-virgules, c'est-à-dire qu'ils correspondent à l'expression régulière suivante
^[-?,.;: a-zA-Z]+$
. Si vous pouvez faire face à plus que cela (en particulier les caractères de citation dans la langue que vous avez choisie), vous devenez suffisant, mais ne gagnez pas de points supplémentaires.Votre programme ne peut pas lire ou écrire un fichier ( à l' exception
STDIN
,STDOUT
etSTDERR
), ou du réseau; en particulier, il ne peut ni lire ni écrire son propre code à partir du disque. Son état doit être enregistré dans le code du programme lui-même.Lorsque le programme est exécuté et suppose la réponse correctement, il doit fonctionner exactement comme une quine, c'est-à-dire qu'il doit écrire
STDOUT
exactement dans son propre code, inchangé.Lorsque le programme est exécuté et devine la réponse de manière incorrecte, il doit coder la nouvelle question et la réponse fournies dans son propre code et l'écrire
STDOUT
dans son propre code, afin qu'il soit capable de faire la distinction entre sa supposition d'origine et le nouvel objet fourni, dans en plus de distinguer entre tous les objets précédemment donnés.Vous devez être en mesure de faire face à plusieurs exécutions séquentielles du logiciel afin qu'il se renseigne sur de nombreux objets. Voir ici pour des exemples de plusieurs exécutions.
Les tests sont donnés au lien dans la tête (couvrant évidemment uniquement la boîte de dialogue
STDIN
etSTDERR
).Les failles standard sont exclues.