Este es un desafío de código de golf en el que debe diseñar un programa que actúe como una quine o una quine que se modifique para ilustrar el aprendizaje automático.
Fondo
Hay un programa básico de inteligencia artificial llamado 'el juego de pangolín' que se describe aquí . La idea básica es que el programa cuando se ejecuta por primera vez pregunta:
OK, por favor piensa en algo
¿Es un pangolín?
Luego puede responder:
Sí
En cuyo caso dice:
Bueno. Eso fue muuuy fácil.
O si no dice:
Oh. Bueno, entonces ganas. ¿En qué estabas pensando?
A lo que podrías decir:
un perro
A lo que diría
Por favor, háganme una pregunta sobre un perro, para que pueda distinguir entre un perro y un pangolín.
podrías responder
¿Come hormigas?
Luego preguntaría:
¿Cuál es la respuesta para un perro?
A lo que dirías
no
Y diría
Gracias
La próxima vez que se ejecute, haría la pregunta anterior y generaría un árbol binario de tales preguntas.
El reto
Basta de antecedentes. Este desafío es escribir un programa de pangolín auto modificable. Las reglas son las siguientes:
La salida del programa (como se describió anteriormente) debe ser a
STDERR
. La respuesta final siempre será "Bien. Eso fue muuuy fácil". o "gracias". Después de esto, debería mostrar la versión actual del programa o una nueva versión del programa que incorpore la preguntaSTDOUT
. No será válida ninguna respuesta escrita en un idioma que no admita escribirSTDOUT
ySTDERR
leerSTDIN
.En otras palabras, bajo UNIX podría invocar el programa de esta manera:
ejemplo:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- El programa tiene que usar exactamente las indicaciones especificadas (porque acortar las indicaciones no muestra habilidad). Las indicaciones son (sin las comillas, y donde se sustituye% s) de la siguiente manera:
lista:
"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"
Al esperar respuestas sí / no, su programa debe aceptar
y
o,yes
en cualquier caso, 'sí', y /n
ono
en cualquier caso 'no'. Lo que haga con entradas no conformes depende de usted. Por ejemplo, puede decidir tomar cualquier respuesta que comience cony
oY
como 'sí', y cualquier otra cosa como no.Puede suponer que los nombres de los elementos suministrados y las preguntas consisten solo en letras ASCII, números, espacios, guiones, signos de interrogación, comas, puntos, puntos y punto y coma, es decir, coinciden con la siguiente expresión regular
^[-?,.;: a-zA-Z]+$
. Si puede hacer frente a algo más que eso (especialmente los caracteres entre comillas en el idioma elegido) puede ser presumido, pero no gana ningún punto extra.Su programa no puede leer o escribir en cualquier archivo (excluyendo
STDIN
,STDOUT
ySTDERR
), o desde la red; específicamente no puede leer ni escribir su propio código desde el disco. Su estado debe guardarse en el propio código del programa.Cuando se ejecuta el programa y adivina la respuesta correctamente, debe funcionar exactamente como una quine, es decir, debe escribir
STDOUT
exactamente su propio código, sin cambios.Cuando el programa se ejecuta y adivina la respuesta incorrectamente, debe codificar la nueva pregunta y respuesta proporcionadas dentro de su propio código y escribirla
STDOUT
en su propio código, por lo que es capaz de distinguir entre su conjetura original y el nuevo objeto proporcionado. Además de distinguir entre todos los objetos dados previamente.Debe poder hacer frente a múltiples ejecuciones secuenciales del software para que aprenda sobre muchos objetos. Consulte aquí para ver ejemplos de ejecuciones múltiples.
Las pruebas se ejecutan en el enlace en la cabecera (obviamente, solo cubren el diálogo
STDIN
ySTDERR
).Las lagunas estándar están excluidas.