Creare il programma più breve per controllare chi ha vinto in un n d tic tac toe gioco.
Il programma dovrebbe funzionare quando n
(larghezza) e d
(numero dimensione) rientrano in questi intervalli:
n∈[3,6]∩ℕ ie a number from this list: 3,4,5,6
d∈[2,5]∩ℕ ie a number from this list: 2,3,4,5
n = 3; d = 2
(3 2 ovvero 3 per 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3 vale a dire 3 per 3 per 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2 ovvero 6 per 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
E così via.
Vincere (se hai giocato abbastanza tic tac toe multidimensionale, questo è lo stesso.)
Affinché ci sia una vittoria, un giocatore deve avere tutti i quadrati adiacenti lungo una linea. Cioè, quel giocatore deve avere delle n
mosse su una linea per essere un vincitore.
Adiacente:
- ogni tessera è un punto; per esempio (0,0,0,0,0) è un punto in
d=5
- le tessere adiacenti sono tessere tali da essere entrambi punti sulla stessa unità d-cubo. In altre parole, la distanza di Chebyshev tra le tessere è 1.
- in altre parole, se un punto
p
è adiacente a un puntoq
, allora ogni coordinata inp
coordinata corrispondenteq
differisce da essa per non più di una. Inoltre, almeno sulla coppia di coordinate differisce esattamente di uno.
Linee:
- Le linee sono definite da vettori e una tessera. Una linea è ogni piastrella colpita dall'equazione:
p0 + t
<
some vector with the same number of coordinates as p0>
Input :
L'ingresso sarà su STDIN. La prima riga di input sarà composta da due numeri n
e d
nel modulo n,d
.
Dopo questo sarà una linea composta da coordinate che specificano le mosse che sono state fatte. Le coordinate saranno elencati nella forma: 1,1;2,2;3,3
. L'angolo in alto a sinistra è l'origine (0,0 per 2D). Nel caso generale, questo elenco sarà simile a quello in 1,2,...,1,4;4,0,...,6,0;...
cui il primo numero rappresenta la destra-sinistra, la seconda su-giù, la terza attraverso la terza dimensione, ecc. Nota che la prima coordinata è X
la prima svolta, la seconda è O
il primo turno, ....
L'input sarà seguito da una nuova riga.
Uscita :
L'output sarà su STDOUT. Indica semplicemente chi ha vinto se qualcuno ha vinto o se è un pareggio. Se non è né un pareggio né una vittoria, non produrre nulla.
Inoltre, indica se c'è uno scontro di mosse, ovvero se ci sono almeno due mosse nella stessa posizione.
Se c'è stata una vittoria / pareggio prima della fine dell'input, il tuo programma può fare quello che vuole.
Casi di test (qualcuno vuole suggerire di più?):
Ingresso:
4,3
0,0,0;1,1,1;1,0,1;2,0,2;0,0,1;2,0,0;2,0,1;3,0,2;3,0,1
Esempio di output:
X wins
Un altro possibile output (richiede una spiegazione):
1
n
mosse su una linea per essere vincenti. (Mi dispiace per non aver pubblicato queste osservazioni nella sandbox, ma non ho nemmeno avuto il tempo di vederlo lì perché è stato pubblicato così presto dopo il sandbox.)