Crear el programa más corto para comprobar que ha ganado en un n d juego de tic tac toe.
Su programa debería funcionar cuando n
(ancho) y d
(número de dimensión) están en estos rangos:
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 es decir, 3 por 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3 es decir, 3 por 3 por 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2 es decir, 6 por 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
Y así.
Ganar (si has jugado suficientes tic tac toe multidimensionales, esto es lo mismo).
Para que haya una victoria, un jugador debe tener todos los cuadrados adyacentes a lo largo de una línea. Es decir, ese jugador debe tener n
movimientos en una línea para ser un ganador.
Adyacente:
- cada azulejo es un punto; por ejemplo (0,0,0,0,0) es un punto en
d=5
- las fichas adyacentes son fichas, de modo que ambos son puntos en la misma unidad d-cubo. En otras palabras, la distancia de Chebyshev entre las fichas es 1.
- en otras palabras, si un punto
p
es adyacente a un puntoq
, entonces cada coordenada enp
la coordenada correspondiente noq
difiere de ella en más de uno. Además, al menos en el par de coordenadas difiere exactamente en uno.
Líneas:
- Las líneas están definidas por vectores y un mosaico. Una línea es cada mosaico golpeado por la ecuación:
p0 + t
<
some vector with the same number of coordinates as p0>
Entrada :
La entrada será a STDIN. La primera línea de entrada será dos números, n
y d
en la forma n,d
.
Después de esto, habrá una línea que consiste en coordenadas que especifican los movimientos que se han realizado. Coordenadas se mostrarán en el formulario: 1,1;2,2;3,3
. La esquina superior izquierda es el origen (0,0 para 2D). En el caso general, esta lista será como 1,2,...,1,4;4,0,...,6,0;...
donde el primer número representa izquierda-derecha-ness, el segundo arriba-abajo-ness, el tercero a la 3ra dimensión, etc. Tenga en cuenta que la primera coordenada es X
el primer giro, el segundo es O
el primer turno ...
La entrada será seguida por una nueva línea.
Salida :
La salida será a STDOUT. Simplemente indique quién ganó si alguien ganó, o si es un empate. Si no es un empate ni una victoria, no generes nada.
Además, indique si hay un choque de movimientos, es decir, si hay al menos dos movimientos en la misma ubicación.
Si hubo una victoria / empate antes de que finalizara la entrada, su programa puede hacer lo que quiera.
Casos de prueba (¿alguien quiere sugerir algo más?):
Entrada:
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
Salida de ejemplo:
X wins
Otra salida posible (requiere explicación):
1
n
movimientos en una línea para ser un ganador. (Perdón por no publicar estos comentarios en el sandbox, pero ni siquiera tuve tiempo de verlo allí porque fue publicado tan pronto después del sandboxing)