Bounties
N ° 1 ( attribué )
Je jetterai 50 répétitions pour la première réponse valide
N ° 2 ( attribué )
Je vais ajouter 100 autres représentants pour la réponse valide la plus courte.
N ° 3 ( ouvert aux soumissions )
Je jetterai 200 rep pour le premier avec une réponse valide plus courte significative. Significatif représentant au plus 45% de la réponse actuellement la plus courte ( 564 octets x 0,45 = max 254 octets ).
Le jeu
Vous vous souvenez du jeu classique " Nine Men's Morris " ou simplement " Mill "? Il y a une variation appelée Three Men's Morris qui est un peu comme un tic-tac-toe mutable.
Règles
Voici le tableau blanc du jeu:
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
est un champ et |–/\
représente les routes entre ces champs.
Le jeu est joué par deux joueurs 1
et 2
qui placent chacun 3 jetons sur le plateau. Cela s'est déjà produit et nous sommes dans le coup. La partie est gagnée si un joueur peut former une mill
qui est une rangée verticale ou horizontale des 3 jetons du joueur.
Les jetons peuvent être déplacés sur le plateau le long des lignes de connexion, selon cette règle:
Vers toute position vide adjacente (c'est-à-dire d'une position de bord au centre, ou du centre à une position de bord, ou d'une position de bord à une position de bord adjacente
Un joueur doit effectuer un mouvement à moins qu'il n'y ait aucune position vide adjacente, auquel cas le mouvement est ignoré.
Le défi
Vous êtes joueur 1
et votre coup est le suivant. Écrivez un programme ou une fonction qui détermine si:
- vous pouvez forcer une victoire avec 2 coups ou moins ( victoire définitive )
- vous pouvez gagner avec 2 coups ou moins, si votre adversaire fait une erreur ( victoire possible )
- vous ne pouvez pas gagner avec 2 coups ou moins, car vous aurez besoin de plus de coups ou parce que les coups forcés conduisent votre adversaire à gagner ( impossible de gagner )
Exigences
- Même si vous gagnez définitivement lorsque vous ennuyez votre adversaire à mort, votre programme doit se terminer dans un temps fini.
- Vous pouvez écrire un programme ou une fonction.
Contribution
Les joueurs sont représentés par 1
et 2
. 0
définit un champ libre. Vous pouvez prendre l'entrée comme une matrice ou un tableau.
Précis
A B C D
2 1 0 | 2 1 0 | 1 0 1 | 1 2 2
2 1 2 | 0 1 0 | 1 0 2 | 2 1 O
0 0 1 | 2 2 1 | 0 2 2 | O O 1
A: [2,1,0,2,1,2,0,0,1]
B: [2,1,0,0,1,0,2,2,1]
C: [1,0,1,1,0,2,0,2,2]
D: [1,2,2,2,1,0,0,0,1]
Possible
A B C
1 0 1 | 1 0 1 | 1 2 2
1 2 2 | 1 2 0 | 0 0 1
2 0 0 | 2 0 2 | 2 1 0
A: [1,0,1,1,2,2,2,0,0]
B: [1,0,1,1,2,0,2,0,2]
C: [1,2,2,0,0,1,2,1,0]
Impossible
A B
1 0 0 | 1 2 0
1 2 2 | 2 1 0
2 0 1 | 1 2 0
A: [1,0,0,1,2,2,2,0,1]
B: [1,2,0,2,1,0,1,2,0]
Production
Votre programme devrait afficher / renvoyer un smiley:
- Victoire définitive:
:)
- Victoire possible:
:|
- Impossible de gagner:
:(
Exemples
Victoire définitive en deux coups:
[2][1][ ] 1. [2][1][ ]
[2][1][2] -> [2][1][2]
[ ][ ][1] [ ][1][ ]
[2][1][ ] 1. [2][1][ ] [ ][1][ ] 2. [ ][ ][1]
[ ][1][ ] -> [ ][ ][1] -> [2][ ][1] -> [2][ ][1]
[2][2][1] [2][2][1] [2][2][1] [2][2][1]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][ ][2] -> [1][ ][2] -> [1][ ][2] -> [ ][ ][2]
[ ][2][2] [ ][2][2] [2][ ][2] [2][ ][2]
Victoire possible en deux coups:
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][2][2] 1. [ ][2][2] [2][ ][2] 2. [1][2][2]
[ ][ ][1] -> [1][ ][1] -> [1][ ][1] -> [1][1][1]
[2][1][ ] [2][1][ ] [2][1][ ] [2][ ][ ]
Impossible de gagner en deux coups:
[1][ ][ ]
[1][2][2]
[2][ ][1]
Prime
Dans le cas où une victoire définitive est possible et que votre programme génère les mouvements d'une manière vers le succès ainsi que a1:a2
(1 mouvement) ou a1:a2,a3:b2
(2 mouvements), vous pouvez retirer 30% de votre nombre d'octets.
C'est le golf de code - donc la réponse la plus courte en octets l'emporte. Les failles standard ne sont pas autorisées.
Merci à Peter Taylor qui a corrigé quelques défauts et amélioré la formulation dans le bac à sable .
[1,0,0,2,1,0,2,2,1]
, le joueur 2 ne peut pas bouger - est-ce une victoire pour le joueur 1?