Kopfgelder
Nr. 1 ( ausgezeichnet )
Ich werde 50 Wiederholungen für die erste gültige Antwort geben
Nr. 2 ( ausgezeichnet )
Ich werde weitere 100 Wiederholungen einwerfen, um die kürzeste gültige Antwort zu erhalten.
Nr. 3 ( offen für Einreichungen )
Ich werde 200 Wiederholungen für die erste mit einer deutlich kürzeren gültigen Antwort einwerfen. Signifikant sind höchstens 45% der aktuell kürzesten Antwort ( 564 Bytes x 0,45 = maximal 254 Bytes ).
Das Spiel
Erinnerst du dich an den Klassiker " Nine Men's Morris " oder einfach " Mill "? Es gibt eine Variante namens Three Men's Morris, die einem veränderlichen Tic-Tac-Toe ähnelt.
Regeln
Dies ist die leere Tafel des Spiels:
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
ist ein Feld und |–/\
repräsentiert Routen zwischen diesen Feldern.
Das Spiel wird von zwei Spielern gespielt 1
und 2
den jedem Platz 3 Token auf dem Brett. Das ist eigentlich schon passiert und wir sind im Spiel. Das Spiel ist gewonnen, wenn ein Spieler mill
eine vertikale oder horizontale Reihe der 3 Spielsteine des Spielers bilden kann .
Spielmarken können auf dem Spielfeld entlang der Verbindungslinien verschoben werden. Dabei gilt folgende Regel:
Zu jeder benachbarten leeren Position (dh von einer Kantenposition zur Mitte oder von der Mitte zu einer Kantenposition oder von einer Kantenposition zu einer benachbarten Kantenposition
Ein Spieler muss einen Zug machen, es sei denn, es gibt keine angrenzende leere Position. In diesem Fall wird der Zug übersprungen.
Die Herausforderung
Du bist ein Spieler 1
und dein Zug ist der nächste. Schreiben Sie ein Programm oder eine Funktion, die bestimmt, ob:
- Sie können einen Gewinn mit 2 oder weniger Zügen erzwingen ( definitiver Gewinn )
- Sie können mit 2 oder weniger Zügen gewinnen, wenn Ihr Gegner einen Fehler macht ( möglicher Gewinn )
- Sie können nicht mit 2 oder weniger Zügen gewinnen, weil Sie mehr Züge benötigen oder weil erzwungene Züge Ihren Gegner zum Sieg führen ( unmöglich zu gewinnen ).
Bedarf
- Auch wenn Sie definitiv gewinnen, wenn Sie Ihren Gegner zu Tode langweilen, muss Ihr Programm in endlicher Zeit abgeschlossen sein.
- Sie können ein Programm oder eine Funktion schreiben.
Eingang
Die Spieler werden von 1
und vertreten 2
. 0
definiert ein freies Feld. Sie können Eingaben als Matrix oder Array übernehmen.
Auf jeden Fall
A B C D
2 1 0 | 2 1 0 | 1 0 1 | 1 2 2
2 1 2 | 0 1 0 | 1 0 2 | 2 1 O
0 0 1 | 2 2 1 | 0 2 2 | O O 1
A: [2,1,0,2,1,2,0,0,1]
B: [2,1,0,0,1,0,2,2,1]
C: [1,0,1,1,0,2,0,2,2]
D: [1,2,2,2,1,0,0,0,1]
Möglich
A B C
1 0 1 | 1 0 1 | 1 2 2
1 2 2 | 1 2 0 | 0 0 1
2 0 0 | 2 0 2 | 2 1 0
A: [1,0,1,1,2,2,2,0,0]
B: [1,0,1,1,2,0,2,0,2]
C: [1,2,2,0,0,1,2,1,0]
Unmöglich
A B
1 0 0 | 1 2 0
1 2 2 | 2 1 0
2 0 1 | 1 2 0
A: [1,0,0,1,2,2,2,0,1]
B: [1,2,0,2,1,0,1,2,0]
Ausgabe
Ihr Programm sollte einen Smiley ausgeben / zurückgeben:
- Definitiver Gewinn:
:)
- Möglicher Gewinn:
:|
- Unmöglich zu gewinnen:
:(
Beispiele
Definitiver Gewinn in zwei Zügen:
[2][1][ ] 1. [2][1][ ]
[2][1][2] -> [2][1][2]
[ ][ ][1] [ ][1][ ]
[2][1][ ] 1. [2][1][ ] [ ][1][ ] 2. [ ][ ][1]
[ ][1][ ] -> [ ][ ][1] -> [2][ ][1] -> [2][ ][1]
[2][2][1] [2][2][1] [2][2][1] [2][2][1]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][ ][2] -> [1][ ][2] -> [1][ ][2] -> [ ][ ][2]
[ ][2][2] [ ][2][2] [2][ ][2] [2][ ][2]
Möglicher Gewinn in zwei Zügen:
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][2][2] 1. [ ][2][2] [2][ ][2] 2. [1][2][2]
[ ][ ][1] -> [1][ ][1] -> [1][ ][1] -> [1][1][1]
[2][1][ ] [2][1][ ] [2][1][ ] [2][ ][ ]
In zwei Zügen nicht zu gewinnen:
[1][ ][ ]
[1][2][2]
[2][ ][1]
Bonus
Falls ein definitiver Gewinn möglich ist und Ihr Programm die Züge eines Weges zum Erfolg ausgibt, wie zum Beispiel a1:a2
(1 Zug) oder a1:a2,a3:b2
(2 Züge), können Sie 30% Ihrer Byteanzahl abziehen .
Das ist Code Golf - also gewinnt die kürzeste Antwort in Bytes. Standardlücken sind nicht zulässig.
Vielen Dank an Peter Taylor, der einige Fehler behoben und die Formulierung in der Sandbox verbessert hat .
[1,0,0,2,1,0,2,2,1]
kann sich Spieler 2 nicht bewegen - ist dies ein Gewinn für Spieler 1?