El objetivo de este desafío es determinar si un movimiento es un movimiento legal de English Checkers .
Este desafío utilizará una placa de 8x8. Una pieza movida debe tratarse como un hombre (no un rey) que solo puede moverse diagonalmente hacia adelante. El tablero tendrá 0 o más piezas negras y 1 o más piezas blancas. Una pieza blanca se moverá actualmente. La pieza blanca puede "saltar" sobre una pieza negra en diagonal frente a ella si el cuadrado directamente detrás está vacío. Es posible dar un salto adicional desde esa posición si hay otra pieza negra en cualquier dirección diagonalmente frente a ella. La captura es obligatoria, por lo que es ilegal no dar un salto que esté disponible. Sin embargo, no es obligatorio tomar un camino que maximice el número de saltos. Básicamente, esto significa que si haces un salto y hay otro salto posible desde la posición final, entonces ese movimiento es ilegal. Las posiciones de las piezas utilizan el siguiente esquema de numeración:
Reglas
Entradas:
Una lista de números que representan piezas negras.
Una lista de números que representan piezas blancas.
Una posición inicial para la pieza blanca.
La posición final de la pieza blanca.
Salida:
- Un valor verdadero si el movimiento es válido, de lo contrario, un valor falso
Puede suponer que una pieza blanca siempre ocupará la posición inicial.
Si es conveniente, puede suponer que la primera pieza blanca en la lista de piezas blancas contendrá la posición inicial en lugar de aceptar la entrada 3.
Código estándar de reglas de golf. Pocos bytes ganan.
Casos de prueba
Para ilustrar, O es la posición inicial, X es la posición final, B son piezas negras y W son piezas blancas
Black pieces: []
White pieces: [5]
Move: (5, 1)
Output: True
Single move no jump
X _ _ _
O _ _ _
B: [6]
W: [9]
M: (9, 2)
O: True
Single jump
_ X _ _
_ B _ _
O _ _ _
B: [2, 6]
M: (9, 2)
O: False
Illegal ending position on top of black piece
_ X _ _
_ B _ _
O _ _ _
B: [7, 14]
W: [17]
M: (17, 3)
O: True
Double jump
_ _ X _
_ _ B _
_ _ _ _
_ B _ _
O _ _ _
B: [7, 14]
M: (17, 10)
O: False
Illegal jump, must take the next jump as well
_ _ _ _
_ _ B _
_ X _ _
_ B _ _
O _ _ _
B: [4]
W: [8]
M: (8, 3)
O: False
Illegal jump across the board
_ _ _ X
B _ _ _
O _ _ _
B: [6, 7]
W: [6]
M: (10, 1)
O: True
Split decision p1
X _ _ _
_ B B _
_ O _ _
B: [6, 7]
M: (10, 3)
O: True
Split decision p2
_ _ X _
_ B B _
_ O _ _
B: [2]
W: [1]
M: (1, 3)
O: False
Sideways Jump
O B X _
B: [6]
W: [1]
M: (1, 10)
O: False
Backwards Jump
O _ _ _
_ B _ _
_ X _ _
B: [6]
W: [9, 2]
M: (9, 2)
O: False
Illegal ending position on top of white piece
_ X _ _
_ B _ _
O _ _ _
B: []
W: [9, 6]
M: (9, 2)
O: False
Illegal jump over white piece
_ X _ _
_ W _ _
O _ _ _
B: [8, 15, 23, 24]
W: [27]
M: (27, 4)
O: True
Split decision long path
_ _ _ X
_ _ _ B
_ _ _ _
_ _ B _
_ _ _ _
_ _ B B
_ _ W _
B: [8, 15, 23, 24]
W: [27]
M: (27, 20)
O: True
Split decision short path
_ _ _ _
_ _ _ B
_ _ _ _
_ _ B _
_ _ _ X
_ _ B B
_ _ W _
fuente
B=[8,15,23,24];W=[27]
con cada unoM=[27,4]
yM=[27,20]
1. dará un cambio de dirección. 2 responderá una pregunta que tengo: ¿son válidos o deben tomarse más tiempo? ("La captura es obligatoria, por lo que es ilegal no dar un salto que esté disponible" sugiere que ambos son válidos, aunque no sé por qué es ilegal no capturar si es posible, por lo que tal vez quieras tomar como ¿Cuántas piezas como sea posible?)Respuestas:
Eso fue desafiante :) * errores corregidos (bytes agregados)
JavaScript (Node.js) ,
197193191185181186 bytesPruébalo en línea!
fuente
>>2&1
lugar de/4%2|0
.[10, 3], [14], 14, 7
fallido.