Dama Dama


10

L'obiettivo di questa sfida è determinare se una mossa è una mossa di Dama inglese legale .

Questa sfida utilizzerà una scheda 8x8. Un pezzo mosso dovrebbe essere trattato come un uomo (non un re) che può solo spostarsi in diagonale in avanti. Il tabellone avrà 0 o più pezzi neri e 1 o più pezzi bianchi. Un pezzo bianco sarà attualmente in movimento. Il pezzo bianco può "saltare" su un pezzo nero in diagonale di fronte se il quadrato direttamente dietro è vuoto. È possibile fare un ulteriore salto da quella posizione se c'è un altro pezzo nero in entrambe le direzioni in diagonale di fronte ad esso. Capture è obbligatorio, quindi è illegale non fare un salto disponibile. Tuttavia, non è obbligatorio seguire un percorso che massimizzi il numero di salti. Fondamentalmente, questo significa che se fai un salto e c'è un altro possibile salto dalla posizione finale, quella mossa è illegale. Le posizioni dei pezzi utilizzano il seguente schema di numerazione:

Numerazione della scacchiera


Regole

ingressi:

  • Un elenco di numeri che rappresentano pezzi neri.

  • Un elenco di numeri che rappresentano pezzi bianchi.

  • Una posizione di partenza per il pezzo bianco

  • La posizione finale per il pezzo bianco

Produzione:

  • Un valore di verità se lo spostamento è valido, altrimenti un valore di falsità


Puoi presumere che un pezzo bianco occuperà sempre la posizione di partenza.

Se conveniente, puoi presumere che il primo pezzo bianco nella lista dei pezzi bianchi conterrà la posizione iniziale invece di accettare l'ingresso 3.

Regole standard per il golf. Vince il minor numero di byte.


Casi test

Per illustrare, O è la posizione iniziale, X è la posizione finale, B sono pezzi neri e W sono pezzi bianchi

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 _

3
Suggerisco un caso di prova come B=[8,15,23,24];W=[27]con ciascuno di M=[27,4]e M=[27,20]1. darà un cambio di direzione. 2 risponderà a una domanda che ho: sono entrambi validi o devono essere presi più a lungo? ("Catturare è obbligatorio, quindi è illegale non fare un salto disponibile" suggerisce che entrambi sono validi, anche se non so perché tu renda illegale non catturare se possibile, quindi forse intendi prendere come più pezzi possibili?)
Jonathan Allan

Mi dispiace non so giocare dama (inglese) . Ti dispiacerebbe aggiungere qualche dettaglio in più su ciò che è una mossa legale.
TSH

1
Ecco un riepilogo dei casi di test in formato compatibile con STDIN.
Arnauld

Capture è obbligatorio, quindi è illegale non fare un salto disponibile. cosa significa "fare un salto"?
Erik the Outgolfer,

1
@JonathanAllan Penso di aver risposto alla tua domanda nella spiegazione e di aver aggiunto i casi di test.
aoemica

Risposte:


1

È stato impegnativo :) * bug corretti (byte aggiunti)

JavaScript (Node.js) , 197 193 191 185 181 186 byte

f=(B,W,S,E,F=1)=>g(S).filter((x,i)=>B[I="includes"](x)&!B[I](t=g(x)[i])&!W[I](t)&&t>0?F+=f(B,W,t,E):0)[0]?F>1:g(S)[I](E)
g=S=>[S--,!(y=~-(e=S-3)/4%2|0)||S%4^3?y?e+1:e:0,S%4||y?y?e:e-1:0]

Provalo online!


Penso che tu possa usare al >>2&1posto di /4%2|0.
Arnauld,

Testcase: [10, 3], [14], 14, 7fallito.
TSH

@tsh risolto :), se più casi di test falliti fammelo sapere
DanielIndie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.