Questa è una sfida di code-golf in base alla quale è necessario ideare un programma che si comporta come un quine o un quine che si modifica per illustrare l'apprendimento automatico.
sfondo
Esiste un programma base di intelligenza artificiale chiamato "il gioco del pangolino" che è descritto qui . L'idea di base è che il programma alla prima esecuzione chieda:
OK, per favore, pensa a qualcosa
È un pangolino?
È quindi possibile rispondere a:
sì
Nel qual caso si dice:
Buono. È stato davvero facile.
O in caso contrario si dice:
Oh. Bene, allora vinci - A cosa stavi pensando?
A cui potresti dire:
un cane
A cui direbbe
Per favore, fammi una domanda su un cane, così posso dire la differenza tra un cane e un pangolino
potresti rispondere
Mangia le formiche?
Quindi chiederebbe:
Qual è la risposta per un cane?
A cui diresti
no
E direbbe
Grazie
La prossima volta che viene eseguito, pone la domanda sopra e crea un albero binario di tali domande.
La sfida
Basta lo sfondo. Questa sfida è scrivere un programma di pangolino che si modifica da solo. Le regole sono le seguenti:
L'output del programma (come descritto sopra) dovrebbe essere a
STDERR
. La risposta finale sarà sempre "Bene. È stato davvero facile". o "Grazie". Successivamente, dovrebbe essere visualizzata la versione corrente del programma o una nuova versione del programma che incorpora la domandaSTDOUT
. Nessuna risposta scritta in una lingua che non supporta la scritturaSTDOUT
eSTDERR
o di letturaSTDIN
sarà valida.In altre parole, in UNIX è possibile richiamare il programma in questo modo:
esempio:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- Il programma deve usare esattamente i prompt specificati (perché accorciare i prompt non mostra abilità). I prompt sono (senza virgolette e dove% s è sostituito) come segue:
elenco:
"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"
Quando aspettandosi risposte sì / no, il programma dovrebbe accettare
y
oyes
comunque per 'sì', en
ono
comunque per 'no'. Quello che fai con input non conformi dipende da te. Ad esempio, potresti decidere di prendere qualsiasi risposta che inizia cony
oY
come "sì" e qualsiasi altra cosa come no.Si può presumere che i nomi delle cose fornite e le domande siano costituite solo da lettere, numeri, spazi, trattini, punti interrogativi, virgole, punti e virgola, punti e virgola, cioè ASCII
^[-?,.;: a-zA-Z]+$
. Se riesci a farcela con qualcosa di più (in particolare i caratteri di citazione nella lingua che hai scelto) diventerai compiaciuto, ma non guadagnerai punti extra.Il vostro programma non può leggere o scrivere qualsiasi tipo di file (ad esclusione
STDIN
,STDOUT
eSTDERR
), o dalla rete; in particolare non può né leggere né scrivere il proprio codice dal disco. Il suo stato deve essere salvato nel codice del programma stesso.Quando il programma viene eseguito e indovina correttamente la risposta, deve funzionare esattamente come un quine, ovvero deve scrivere
STDOUT
esattamente nel proprio codice, invariato.Quando il programma viene eseguito e indovina la risposta in modo errato, deve codificare la nuova domanda fornita e rispondere nel proprio codice e scriverla
STDOUT
nel proprio codice, quindi è in grado di distinguere tra la sua ipotesi originale e il nuovo oggetto fornito, in oltre a distinguere tra tutti gli oggetti precedentemente indicati.Devi essere in grado di far fronte a più esecuzioni sequenziali del software in modo che apprenda su molti oggetti. Vedi qui per esempi di corse multiple.
Le esecuzioni dei test sono riportate nel link in testa (ovviamente copre solo il dialogo
STDIN
eSTDERR
).Sono escluse le scappatoie standard .