Schreiben Sie ein Programm in der von Ihnen gewählten Sprache, das auf einem 3 * 3-Brett ein perfektes Tic-Tac-Toe-Spiel gegen einen menschlichen Spieler spielt. Allerdings hat jede Bewegung ein anderes Programm sein , aus der vorherige Iteration erzeugt.
Wie und in welcher Form Sie menschliche Eingaben bewerten, liegt bei Ihnen, muss aber von der Standardeingabe abgelesen werden. Ebenso können Sie eine Methode auswählen, mit der Sie bestimmen, welcher Spieler startet (Sie fragen beispielsweise zuerst, oder Sie gestatten dem Menschen, einen ungültigen Zug einzugeben, um zu signalisieren, dass der Computer startet, oder andere Ideen).
Das Bestätigen von Zügen ist nicht erforderlich. Sie können davon ausgehen, dass Sie einen fairen menschlichen Gegner haben.
Grundsätzlich haben Sie ein Programm, das einem Zustand der Karte entspricht. Der Status wird auf jede erkennbare Weise gedruckt, es wird jedoch mindestens der folgende Detaillierungsgrad erwartet:
X..
00X
x..
Nachdem der menschliche Spieler seine Züge eingegeben hat, muss Ihr Programm die nächste Iteration von sich selbst als Quelldatei in derselben Sprache (entweder als Standardausgabe oder als Datei) generieren und beenden. Sie dürfen keine Informationen außerhalb dieser Quelldatei speichern. (Es ist nicht erforderlich, dass Ihr Programm das generierte Programm erstellt und ausführt. Dies kann vom Benutzer durchgeführt werden. Dies ist jedoch nicht verboten.) Wenn das generierte Programm erstellt und ausgeführt wird, verhält es sich ähnlich, zeigt den Status an, wartet auf Benutzereingaben usw.
Am Ende des Spiels müssen Sie das Ergebnis (egal ob Sie gewonnen haben oder ob es ein Unentschieden ist) auf eindeutig identifizierbare Weise ausdrucken.
Mit perfektem Spiel meine ich, dass das Programm nicht verlieren darf, und wenn die Möglichkeit besteht, einen Gewinn zu erzwingen, sollte es gewinnen.
Der kürzeste Code gewinnt , der Gewinner wird mindestens 10 Tage nach dem ersten gültigen Eintrag ausgewählt.
Sie erhalten eine 10% ige Reduzierung der Punktzahl, wenn Ihr Programm die Erstellung und den Start der nächsten Iteration bewältigen kann. (Ich weiß, es lohnt sich höchstwahrscheinlich nicht.) Natürlich muss das Programm selbst beendet sein, wenn die nächste Iteration die Bewegungen des Benutzers akzeptiert.
Wenn Sie einige ungewöhnliche Tricks verwenden, geben Sie bitte eine kurze Erklärung mit Ihrem Code ein.