Contexte
Hex est un jeu de stratégie abstrait à deux joueurs joué sur un K×K
losange de tuiles hexagonales. Deux côtés opposés du losange sont de couleur blanche, et les deux autres noirs, et les deux joueurs, noir et blanc, se relaient en plaçant un jeton de leur couleur sur une tuile inoccupée. Le joueur qui réussit le premier à construire un chemin entre les côtés opposés de sa couleur est le gagnant. Il est connu que le jeu ne peut pas se terminer par un match nul et que le premier joueur a une stratégie gagnante quelle que soit la taille du plateau (voir la page Wikipedia pour plus de détails).
La tâche
Dans ce défi, nous fixons la taille de la carte à K = 4
et représentons la carte comme la grille suivante. Les lignes épaisses indiquent les tuiles adjacentes.
Votre tâche consiste à produire une stratégie gagnante pour le premier joueur, que vous pouvez choisir d'être noire ou blanche. Cela signifie que quels que soient les mouvements légaux du joueur adverse, votre jeu doit aboutir à une victoire. Votre entrée est une position de jeu (l'arrangement des jetons sur le plateau) et votre sortie est un mouvement légal, dans le format spécifié ci-dessous. Si vous voulez trouver vous-même une stratégie gagnante, ne lisez pas ce spoiler:
Esquisse d'une stratégie gagnante possible, en supposant que le blanc passe en premier. Sélectionnez d'abord 5. Après cela, si vous avez un chemin de 5 à la ligne inférieure OU le noir sélectionne 0 ou 1 à tout moment, répondez en sélectionnant celui de 0 ou 1 qui est vacant. Si le noir sélectionne 9 ou 13, sélectionnez 10, puis celui de 14 ou 15 est vacant. Si le noir ne sélectionne pas 9, 13 ou 14, sélectionnez 9 et le suivant, le 13 ou le 14 étant vacant. Si le noir sélectionne 14, répondez en sélectionnant 15. Ensuite, sélectionnez 10 s'il est vacant; si le noir sélectionne 10, répondez par 11. Si le noir sélectionne alors 6, répondez par 7, et le suivant de 2 ou 3 est vacant. Si le noir ne sélectionne pas 6, sélectionnez-le, vous avez donc un chemin de 5 à la ligne du bas.
Entrée et sortie
Votre entrée est une chaîne de 16 caractères WBE
, qui signifie blanc, noir et vide. Ils représentent les tuiles du plateau, comme énuméré ci-dessus. Vous pouvez choisir la méthode d'entrée (qui détermine également votre méthode de sortie) parmi les options suivantes:
- Entrée depuis STDIN, sortie vers STDOUT.
- Entrez comme un argument de ligne de commande, sortie vers STDOUT.
- Entrer en tant que 16 arguments de ligne de commande à un caractère, sortir sur STDOUT.
- Entrée comme argument de la fonction nommée, sortie comme valeur de retour.
Votre sortie représente la tuile sur laquelle vous placez votre prochain jeton, car c'est à votre tour de vous déplacer. Vous pouvez choisir parmi les formats de sortie suivants:
- Un index basé sur zéro (comme utilisé dans l'image ci-dessus).
- Un index à base unique.
- La chaîne d'entrée avec une
E
remplacée par celleW
ou celle queB
vous avez choisie pour votre lecteur.
Règles
Votre stratégie doit être déterministe. Vous n'êtes pas obligé de gérer correctement les positions de jeu qui sont inaccessibles à partir du plateau vide en utilisant votre stratégie, ou les positions qui gagnent déjà pour l'un ou l'autre joueur, et vous pouvez planter dessus. À l'inverse, sur les tableaux accessibles à l'aide de votre stratégie, vous devez retourner un coup légal.
C'est le code-golf, donc le nombre d'octets le plus bas l'emporte. Les failles standard ne sont pas autorisées.
Essai
J'ai écrit un contrôleur Python 3 pour valider les entrées, car il serait extrêmement fastidieux de le faire à la main. Vous pouvez le trouver ici . Il prend en charge les trois premiers formats d'entrée et les fonctions Python 3 (les fonctions dans d'autres langues doivent être intégrées dans des programmes), les trois formats de sortie et les deux lecteurs. Si une stratégie ne gagne pas, elle produira une partie perdante trouvée, vous pouvez donc modifier votre programme.
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
J'aurais dû gagner depuis longtemps, ou je me trompe?