Creare un programma deterministico per giocare n d tic-tac-toe con gli altri concorrenti.
Il programma dovrebbe funzionare quando n
(larghezza) e d
(numero dimensione) rientrano in questi intervalli:
n∈[3,∞)∩ℕ ie a natural number greater than 2
d∈[2,∞)∩ℕ ie a natural number greater than 1
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.
Ingresso:
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. Si noti che la prima coordinata è X
la prima svolta, la seconda è O
il primo turno, ....
Se questa è la prima mossa, l'input sarà un numero seguito da 1 riga vuota.
Per coerenza, l'input termina sempre con una nuova riga. Input di esempio (\ n è newline):
10,10\n0,0,0,0,0,0,0,0,0,0;0,2,3,4,5,6,7,8,9,0;0,1,2,3,4,5,6,7,8,9\n
Per la prima mossa:
10,10\n\n
dov'è \n
il personaggio newline.
Produzione:
Stampa la mossa che desideri effettuare nello stesso formato dell'input (un elenco separato da virgole). Una mossa non valida (cioè una che è già stata presa) comporterà una perdita per il gioco.
Nota: è possibile utilizzare un generatore di numeri casuali, purché lo si semini con un valore tale che ogni serie sia identica, date le stesse condizioni. In altre parole, il programma deve essere deterministico.
Nota: sono consentite solo mosse valide.
Giochi vincenti (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>
Simulazione e condizioni vincenti:
Indica nella tua risposta se è pronto per la valutazione. Cioè, indica chiaramente se la tua risposta è stata o meno eseguita.
Se la tua risposta è contrassegnata come completata, non verrà valutata fino ad almeno 24 ore dopo l'ultima modifica del codice.
I programmi devono funzionare offline. Se si scopre che un programma sta imbrogliando, riceverà automaticamente un punteggio di
-1
e non verrà segnato ulteriormente. (Come si finirebbe per imbrogliare i propri programmi?)Se il tuo programma produce un output non valido, viene immediatamente conteggiato come una perdita per il gioco
Se il programma non riesce a produrre output dopo 1 minuto, viene immediatamente conteggiato come una perdita per il gioco. Se necessario, ottimizzare per la velocità. Non voglio aspettare un'ora per testare un programma fuori da un altro.
Ogni programma verrà eseguito due volte rispetto agli altri programmi per ciascuno
n
nell'intervallo[3,6]
e ciascunod
nell'intervallo[2,5]
, una volta comeX
e una volta comeO
. Questo è un round.Per ogni partita che un programma vince, arriva
+3
al suo punteggio. Se il programma ha pareggiato (1 vittoria e 1 sconfitta in un singolo round o pareggi per entrambe le partite), allora ottiene+1
. Se il programma viene perso, viene visualizzato+0
(ovvero nessuna modifica).Vince il programma con il punteggio più alto. In caso di pareggio, vince il programma con il minor numero di partite perse (fuori dai concorrenti in parità).
Nota: a seconda del numero di risposte, potrei aver bisogno di aiuto per eseguire i test.
In bocca al lupo! E che le simulazioni siano sempre a tuo favore!