O objetivo deste desafio é determinar se um movimento é um legal Damas Inglesas movimento.
Este desafio usará uma placa 8x8. Uma peça movida deve ser tratada como um homem (não um rei) que só pode avançar na diagonal. O tabuleiro terá 0 ou mais peças pretas e 1 ou mais peças brancas. Uma peça branca estará em movimento no momento. A peça branca pode "pular" sobre uma peça preta na diagonal à sua frente, se o quadrado diretamente atrás dela estiver vazio. É possível saltar mais a partir dessa posição se houver outra peça preta em qualquer direção na diagonal à sua frente. A captura é obrigatória, portanto, é ilegal não dar um salto disponível. No entanto, não é obrigatório seguir um caminho que maximize o número de saltos. Basicamente, isso significa que, se você fizer um salto e houver outro salto possível a partir da posição final, esse movimento será ilegal. As posições das peças usam o seguinte esquema de numeração:
Regras
Entradas:
Uma lista de números que representam peças pretas.
Uma lista de números que representam peças brancas.
Uma posição inicial para a peça branca
A posição final da peça branca
Resultado:
- Um valor verdadeiro se a movimentação for válida, caso contrário, um valor de falsey
Você pode assumir que uma peça branca sempre ocupará a posição inicial.
Se conveniente, você pode assumir que a primeira peça branca da lista de peças brancas conterá a posição inicial em vez de aceitar a entrada 3.
Regras de golfe de código padrão. Menos bytes ganha.
Casos de teste
Para ilustrar, O é a posição inicial, X é a posição final, B são peças pretas e W são peças brancas
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 _
fonte
B=[8,15,23,24];W=[27]
com cada umM=[27,4]
eM=[27,20]
1. ele dará uma mudança de direção. 2 ele responderá a uma pergunta que tenho: ambos são válidos ou devem ser mais demorados? ("A captura é obrigatória, portanto, é ilegal não dar um pulo disponível" meio que sugere que ambos sejam válidos, embora eu não saiba por que você faz com que seja ilegal não capturar, se possível, talvez você queira número de peças possível)?Respostas:
Isso foi desafiador :) * bugs corrigidos (bytes adicionados)
JavaScript (Node.js) ,
197193191185181186 bytesExperimente online!
fonte
>>2&1
vez de/4%2|0
.[10, 3], [14], 14, 7
falhou.