Créez le programme le plus court pour vérifier qui a gagné dans un jeu n d tic tac toe.
Votre programme devrait fonctionner lorsque n(largeur) et d(numéro de dimension) se trouvent dans ces plages:
n∈[3,6]∩ℕ ie a number from this list: 3,4,5,6
d∈[2,5]∩ℕ ie a number from this list: 2,3,4,5
n = 3; d = 2(3 2 soit 3 par 3):
[][][]
[][][]
[][][]
n = 3; d = 3(3 3 soit 3 par 3 par 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2(6 2 soit 6 par 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
Etc.
Gagner (Si vous avez joué suffisamment de tic tac toe multidimensionnel, c'est la même chose.)
Pour qu'il y ait une victoire, un joueur doit avoir toutes les cases adjacentes le long d'une ligne. Autrement dit, ce joueur doit avoir des nmouvements sur une ligne pour être gagnant.
Adjacent:
- chaque tuile est un point; par exemple (0,0,0,0,0) est un point
d=5 - les tuiles adjacentes sont des tuiles telles qu'elles sont les deux points sur la même unité d-cube. En d'autres termes, la distance de Chebyshev entre les tuiles est de 1.
- en d'autres termes, si un point
pest adjacent à un pointq, alors chaque coordonnée enps coordonnée correspondante en neqdiffère pas de plus d'un. De plus, au moins sur la paire de coordonnées diffère exactement d'un.
Lignes:
- Les lignes sont définies par des vecteurs et une tuile. Une ligne est chaque tuile frappée par l'équation:
p0 + t<some vector with the same number of coordinates as p0>
Entrée :
L'entrée sera vers STDIN. La première ligne de saisie sera composée de deux nombres net dsous la forme n,d.
Après cela sera une ligne composée de coordonnées spécifiant les mouvements qui ont été effectués. Les coordonnées seront listés sous la forme: 1,1;2,2;3,3. Le coin supérieur gauche est l'origine (0,0 pour 2D). Dans le cas général, cette liste sera comme 1,2,...,1,4;4,0,...,6,0;...où le premier nombre représente la gauche-droite-ness, la deuxième haut-bas-ness, la troisième à la 3ème dimension, etc. Notez que la première coordonnée est Xs premier tour, la seconde c'est Ole premier tour, ....
L'entrée sera suivie d'une nouvelle ligne.
Sortie :
La sortie sera vers STDOUT. Indiquez simplement qui a gagné si quelqu'un a gagné ou s'il s'agit d'une égalité. Si ce n'est ni une égalité ni une victoire, ne produisez rien.
De plus, indiquez s'il y a un conflit de mouvements, c'est-à-dire s'il y a au moins deux mouvements au même endroit.
S'il y a eu une victoire / match nul avant la fin de la saisie, votre programme peut faire ce qu'il veut.
Cas de test (quelqu'un veut-il suggérer plus?):
Contribution:
4,3
0,0,0;1,1,1;1,0,1;2,0,2;0,0,1;2,0,0;2,0,1;3,0,2;3,0,1
Exemple de sortie:
X wins
Une autre sortie possible (nécessite une explication):
1
nmouvements sur une ligne pour gagner. (Désolé de ne pas avoir posté ces remarques dans le bac à sable, mais je n'ai même pas eu le temps de le voir là-bas car il a été publié si peu de temps après le bac à sable.)