Ce défi concerne le jeu Tic Tac Toe, mais il se joue sur un tore.
Comment jouer
Pour créer le plateau de jeu nécessaire, vous commencez avec un plateau de jeu Tic Tac Toe classique. Pliez-le d'abord dans un cylindre en joignant le bord gauche et le bord droit. Ensuite, pliez-le en tore en joignant le bord supérieur et le bord inférieur. Voici une visualisation simple d'un tel plateau de jeu avec quelques mouvements joués (compétences Sick Paint!).
Les règles du Tic Tac Toe sur un tore sont les mêmes que celles du Tic Tac Toe ordinaire. Chaque joueur place des X et des Os alternés. Le premier avec 3 mêmes symboles dans une rangée, une colonne ou un en diagonale l'emporte.
Puisqu'un tore est assez difficile à visualiser, nous projetons simplement le tableau sur un papier. Maintenant, nous pouvons jouer au jeu en tant que Tic Tac Toe régulier. La seule différence est que vous pouvez également gagner avec 3 mêmes symboles dans une diagonale brisée. Par exemple, le joueur 1 (X) remporte le plateau suivant. Vous pouvez le voir facilement en changeant un peu la vue sur le tore.
Si vous êtes intéressé, vous pouvez jouer au Tic Tac Toe sur un Torus sur Torus Games . Il existe une version Windows, Mac et Android.
Jeux optimaux
Dans ce défi étaient intéressés par des jeux optimaux. Un jeu optimal est un jeu où les deux joueurs jouent une stratégie optimale. Sur un plateau régulier de Tic Tac Toe, les jeux optimaux se terminent toujours par un match nul. De façon fascinante sur un plateau tore, le premier joueur gagne toujours. En fait, un jeu sur un plateau torus ne peut jamais se terminer par un match nul (même si les joueurs ne jouent pas de manière optimale).
La stratégie optimale est vraiment simple:
- Si vous pouvez gagner en plaçant votre symbole, faites-le.
- Sinon, si votre adversaire a deux symboles dans une ligne / colonne / agonaliagonale, essayez de le bloquer. Sinon, faites ce que vous voulez.
- Sinon, faites ce que vous voulez.
Chaque jeu optimal se compose exactement de 7 coups et ces mouvements peuvent être décrits de la manière suivante:
- Le joueur 1 place un X n'importe où sur le plateau (9 choix)
- Le joueur 2 place un O n'importe où sur le plateau (8 choix)
- Le joueur 1 place un X n'importe où sur le plateau (7 choix)
- Le coup du joueur 2 peut être forcé (1 choix), sinon, il place le O n'importe où (6 choix)
- Le coup du joueur 1 est forcé (1 choix)
- Le joueur 2 est pris dans une fourchette (le joueur 1 peut gagner de deux manières différentes), donc le joueur 2 doit bloquer le joueur 1 dans un sens (2 choix)
- Le joueur 1 place son dernier coup et gagne (1 choix)
Il y a 9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728 différents jeux optimaux sur notre tableau projeté. Ici vous pouvez voir un jeu optimal typique:
Si nous étiquetons chaque cellule du plateau avec les chiffres 0-8
, nous pouvons décrire ce jeu par les chiffres 3518207
. D'abord un X est placé dans la cellule 3 (ligne du milieu, colonne de gauche), puis un O dans la cellule 5 (ligne du milieu, colonne de droite), puis un X dans la cellule 1 (ligne du haut, colonne du milieu), ...
En utilisant cette notation numérique, nous avons automatiquement généré une commande. Maintenant, nous pouvons trier tous les 1728 jeux optimaux et nous obtenons la liste:
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
Défi
Cette liste fait partie de votre travail. Vous recevrez un numéro k
entre 0 et 1727 et vous devrez retourner le k
jeu en notation numérique de cette liste triée.
Écrivez une fonction ou un programme, qui reçoit le nombre k
(entier) calcule le jeu correspondant. Vous pouvez lire l'entrée via STDIN, l'argument de ligne de commande, l'invite ou l'argument de fonction et imprimer le résultat (7 chiffres) dans un format lisible (par exemple 0123845
ou [0, 1, 2, 3, 8, 4, 5]
) ou le renvoyer en utilisant une chaîne (format lisible par l'homme) ou un entier (contenant tous chiffres en base 10), ou dans n'importe quel format de tableau / liste.
Le type de défi est le code-golf. Par conséquent, le code le plus court l'emporte.