bounties
N. 1 ( assegnato )
Lancerò 50 ripetitori per la prima risposta valida
N. 2 ( assegnato )
Lancerò un altro 100 rappresentanti per la risposta valida più breve.
N. 3 ( aperto per le presentazioni )
Lancerò 200 rappresentanti per il primo con una risposta valida più breve e significativa. Significativo essere al massimo il 45% della risposta attualmente più breve ( 564 byte x 0,45 = max 254 byte ).
Il gioco
Ricordi il classico gioco " Nine Men's Morris " o semplicemente " Mill "? C'è una variante chiamata Three Men's Morris che è un po 'come un mutevole tic-tac-toe.
Regole
Questo è il tabellone vuoto del gioco:
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
è un campo e |–/\
rappresenta percorsi tra tali campi.
La partita è giocata da due giocatori 1
e 2
ognuno piazza 3 gettoni sul tabellone. Questo in realtà è già successo e siamo nel gioco. Il gioco si vince se un giocatore può formare una mill
fila verticale o orizzontale dei 3 gettoni del giocatore.
I token possono essere spostati sulla scheda lungo le linee di connessione, secondo questa regola:
In qualsiasi posizione vuota adiacente (ovvero da una posizione del bordo al centro, o dal centro a una posizione del bordo, o da una posizione del bordo a una posizione del bordo adiacente
Un giocatore deve fare una mossa a meno che non ci sia una posizione vuota adiacente, nel qual caso la mossa viene saltata.
La sfida
Sei un giocatore 1
e la tua mossa è la prossima. Scrivi un programma o una funzione, che determina se:
- puoi forzare una vittoria con 2 o meno mosse ( vittoria definitiva )
- puoi vincere con 2 o meno mosse, se il tuo avversario commette un errore ( possibile vittoria )
- non puoi vincere con 2 o meno mosse, perché avrai bisogno di più mosse o perché le mosse forzate portano il tuo avversario a vincere ( impossibile vincere )
Requisiti
- Anche se vincerai sicuramente quando avrai annoiato il tuo avversario a morte, il tuo programma dovrà terminare a tempo finito.
- È possibile scrivere un programma o una funzione.
Ingresso
I giocatori sono rappresentati da 1
e 2
. 0
definisce un campo libero. È possibile accettare input come matrice o matrice.
Definito
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]
Possibile
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]
Impossibile
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]
Produzione
Il tuo programma dovrebbe generare / restituire un emoticon:
- Vittoria definitiva:
:)
- Possibile vittoria:
:|
- Impossibile vincere:
:(
Esempi
Vittoria definitiva in due mosse:
[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]
Possibile vittoria in due mosse:
[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][ ][ ]
Impossibile vincere in due mosse:
[1][ ][ ]
[1][2][2]
[2][ ][1]
indennità
Nel caso in cui sia possibile una vincita definita e il tuo programma fornisca le mosse di una via al successo, come a1:a2
(1 mossa) o a1:a2,a3:b2
(2 mosse), puoi ritirare il 30% del conteggio dei byte.
Questo è il golf del codice - quindi vince la risposta più breve in byte. Le scappatoie standard non sono ammesse.
Grazie a Peter Taylor che ha corretto alcuni difetti e migliorato la formulazione nella Sandbox .
[1,0,0,2,1,0,2,2,1]
, il giocatore 2 non può muoversi - è una vittoria per il giocatore 1?