Questa sfida riguarda il gioco Tic Tac Toe, ma si gioca su un toro.
Come giocare
Per creare il tabellone di gioco necessario, inizi con un tabellone di gioco Tic Tac Toe normale. Per prima cosa piegalo in un cilindro unendo il bordo sinistro e quello destro. Quindi piegalo in toro unendo il bordo superiore e quello inferiore. Ecco una semplice visualizzazione di un tale tabellone con alcune mosse giocate (abilità Sick Paint!).
Le regole di Tic Tac Toe su un toro sono le stesse del normale Tic Tac Toe. Ogni giocatore piazza alternando X e O. Vince il primo con 3 simboli uguali di fila, una colonna o un diagonale.
Poiché un toro è piuttosto difficile da visualizzare, semplicemente proiettiamo la scheda su un foglio. Ora possiamo giocare come un normale Tic Tac Toe. L'unica differenza è che puoi anche vincere con 3 simboli uguali in una diagonale rotta. Ad esempio, il giocatore 1 (X) vince il seguente tabellone. Puoi vederlo facilmente cambiando un po 'la vista sul toro.
Se sei interessato, puoi giocare a Tic Tac Toe su un Torus ai Torus Games . C'è una versione per Windows, Mac e Android.
Giochi ottimali
In questa sfida erano interessati a giochi ottimali. Un gioco ottimale è un gioco in cui entrambi i giocatori giocano una strategia ottimale. Su una tavola Tic Tac Toe regolare i giochi ottimali finiscono sempre con un pareggio. Affascinante su una tavola del toro vince sempre il primo giocatore. In effetti un gioco su una tavola del toro non può mai finire in parità (anche se i giocatori non giocano in modo ottimale).
La strategia ottimale è davvero semplice:
- Se puoi vincere posizionando il tuo simbolo, fallo.
- Altrimenti, se il tuo avversario ha due simboli in una riga / colonna / gonal diagonale, prova a bloccarlo. Altrimenti, fai quello che vuoi.
- Altrimenti fai quello che vuoi.
Ogni gioco ottimale consiste esattamente di 7 mosse e queste mosse possono essere descritte nel modo seguente:
- Il giocatore 1 piazza una X in qualsiasi punto del tabellone (9 scelte)
- Il giocatore 2 piazza una O in qualsiasi punto del tabellone (8 scelte)
- Il giocatore 1 piazza una X in qualsiasi punto del tabellone (7 scelte)
- La mossa del giocatore 2 può essere forzata (1 scelta), altrimenti posiziona la O ovunque (6 scelte)
- La mossa del giocatore 1 è forzata (1 scelta)
- Il giocatore 2 viene catturato in un fork (il giocatore 1 può vincere in due modi diversi), quindi il giocatore 2 deve bloccare il giocatore 1 in un modo (2 scelte)
- Il giocatore 1 piazza la sua ultima mossa e vince (1 scelta)
Ci sono 9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728 diversi giochi ottimali sulla nostra tavola proiettata. Qui puoi vedere un tipico gioco ottimale:
Se etichettiamo ogni cella del tabellone con le cifre 0-8
, possiamo descrivere questo gioco in base alle cifre 3518207
. Innanzitutto una X è posizionata nella cella 3 (riga centrale, colonna sinistra), rispetto a una O nella cella 5 (riga centrale, colonna destra), rispetto a una X nella cella 1 (riga superiore, colonna centrale), ...
Usando questa notazione con cifre abbiamo generato automaticamente un ordine. Ora possiamo ordinare tutti i 1728 giochi ottimali e otteniamo l'elenco:
Game 0000: 0123845
Game 0001: 0123854
Game 0002: 0124735
Game 0003: 0124753
Game 0004: 0125634
...
Game 0674: 3518207
...
Game 1000: 5167423
Game 1001: 5167432
Game 1002: 5168304
...
Game 1726: 8765034
Game 1727: 8765043
Sfida
Questo elenco fa parte del tuo lavoro. Riceverai un numero k
compreso tra 0 e 1727 e dovrai restituire il k
gioco in notazione numerica di quell'elenco ordinato.
Scrivi una funzione o un programma, che riceve il numero k
(intero) calcola il gioco corrispondente. È possibile leggere l'input tramite STDIN, argomento della riga di comando, argomento prompt o funzione e stampare il risultato (7 cifre) in un formato leggibile (ad esempio 0123845
o [0, 1, 2, 3, 8, 4, 5]
) oppure restituirlo utilizzando una stringa (formato leggibile dall'uomo) o un numero intero (contenente tutti cifre in base 10) o in qualsiasi formato di array / elenco.
Il tipo di sfida è il code-golf. Pertanto vince il codice più breve.