Recompensas
No. 1 ( otorgado )
Lanzaré 50 repeticiones por la primera respuesta válida
No. 2 ( otorgado )
Agregaré otras 100 repeticiones para obtener la respuesta válida más corta.
No. 3 ( abierto para envíos )
Lanzaré 200 repeticiones por la primera con una respuesta válida más corta y significativa. Ser significativo como máximo el 45% de la respuesta más corta actual ( 564 bytes x 0.45 = máximo 254 bytes ).
El juego
¿Recuerdas el clásico juego " Morris de nueve hombres " o simplemente " Mill "? Hay una variación llamada Three Men's Morris que es un poco como un tic-tac-toe mutable.
Reglas
Este es el tablero en blanco del juego:
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
es un campo y |–/\
representa rutas entre esos campos.
El juego es jugado por dos jugadores 1
y 2
cada uno coloca 3 fichas en el tablero. Esto ya sucedió y estamos en el juego. El juego se gana si un jugador puede formar unmill
fila vertical u horizontal de las 3 fichas del jugador.
Las fichas se pueden mover en el tablero a lo largo de las líneas de conexión, de acuerdo con esta regla:
A cualquier posición vacía adyacente (es decir, desde una posición de borde al centro, o desde el centro a una posición de borde, o desde una posición de borde a una posición de borde adyacente
Un jugador debe hacer un movimiento a menos que no haya una posición vacía adyacente, en cuyo caso se omite el movimiento.
El reto
Eres jugador 1
y tu movimiento es el siguiente. Escriba un programa o una función que determine si:
- puedes forzar una victoria con 2 o menos movimientos ( victoria definitiva )
- puedes ganar con 2 o menos movimientos, si tu oponente comete un error ( posible victoria )
- no puedes ganar con 2 o menos movimientos, porque necesitarás más movimientos o porque los movimientos forzados llevan a tu oponente a ganar ( imposible de ganar )
Requisitos
- Aunque definitivamente ganas cuando matas a tu oponente, tu programa debe terminar en un tiempo finito.
- Puedes escribir un programa o una función.
Entrada
Los jugadores están representados por 1
y 2
. 0
define un campo libre Puede tomar la entrada como una matriz o una matriz.
Definido
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]
Posible
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]
Imposible
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]
Salida
Su programa debería generar / devolver un smiley:
- Victoria definitiva:
:)
- Posible victoria:
:|
- Imposible ganar:
:(
Ejemplos
Victoria definitiva en dos movimientos:
[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]
Posible victoria en dos movimientos:
[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][ ][ ]
Imposible ganar en dos movimientos:
[1][ ][ ]
[1][2][2]
[2][ ][1]
Prima
En caso de que sea posible una victoria definitiva y su programa genere los movimientos de una forma hacia el éxito, así como a1:a2
(1 movimiento) o a1:a2,a3:b2
(2 movimientos), puede retirar el 30% de su conteo de bytes.
Este es el código de golf, por lo que la respuesta más corta en bytes gana. Las lagunas estándar no están permitidas.
Gracias a Peter Taylor que solucionó algunos defectos y mejoró la redacción en el Sandbox .
[1,0,0,2,1,0,2,2,1]
, en , el jugador 2 no puede moverse: ¿es una victoria para el jugador 1?