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 n
mouvements 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
p
est adjacent à un pointq
, alors chaque coordonnée enp
s coordonnée correspondante en neq
diffè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 n
et d
sous 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 X
s premier tour, la seconde c'est O
le 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
n
mouvements 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.)