Scrivi un programma nella lingua prescelta che gioca un gioco perfetto di tic-tac-toe su una tavola 3 * 3 contro un giocatore umano. Tuttavia, ogni mossa deve essere un programma diverso , generato dalla precedente iterazione.
Come e in quale forma valuti l'input umano, dipende da te, ma deve essere letto dall'input standard. Allo stesso modo, sei libero di scegliere un metodo per determinare quale giocatore inizia (ad esempio, chiedi per primo o permetti all'essere umano di inserire una mossa non valida per segnalare l'avvio del computer o altre idee).
Convalidare le mosse non è necessario, puoi assumere un avversario umano abbastanza giocoso.
Fondamentalmente, hai un programma che corrisponde a uno stato della scheda. Lo stato viene stampato in modo riconoscibile, ma è previsto almeno il seguente livello di dettaglio:
X..
00X
x..
Dopo che il giocatore umano ha inserito le sue mosse, il tuo programma deve generare la successiva iterazione di se stesso come file sorgente nella stessa lingua (o nell'output standard o in un file) e terminare. Non è consentito memorizzare informazioni altrove al di fuori del file di origine. (non è necessario che il tuo programma compili ed esegua il programma generato, può essere fatto dall'utente, tuttavia non è proibito). Quando il programma generato viene creato ed eseguito, si comporterà in modo simile, visualizzerà lo stato, attenderà l'input dell'utente, ecc.
Alla fine del gioco, devi stampare il risultato (sia che tu abbia vinto o sia un pareggio) in un modo inequivocabilmente identificabile.
Per gioco perfetto intendo che il programma non deve perdere, e se c'è la possibilità di forzare una vittoria, dovrebbe vincere.
Il codice più corto vince , il vincitore viene selezionato almeno 10 giorni dopo la prima iscrizione valida.
Ottieni una riduzione del 10% nel punteggio se il tuo programma è in grado di gestire la costruzione e il lancio della prossima iterazione. (Lo so, molto probabilmente non ne vale la pena) Naturalmente, il programma stesso deve essere chiuso dal momento in cui la successiva iterazione accetta le mosse da parte dell'utente.
Se usi alcuni strani trucchi non comuni, pubblica una breve spiegazione con il tuo codice.