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 nmosse 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 inpcoordinata corrispondenteqdifferisce 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 ne dnel 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 è Xla prima svolta, la seconda è Oil 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
nmosse 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.)