Checkers Checker

10

Das Ziel dieser Herausforderung ist es festzustellen, ob ein Umzug ein legaler Zug von English Checkers ist .

Für diese Herausforderung wird ein 8x8-Board verwendet. Ein bewegtes Stück sollte als ein Mann (kein König) behandelt werden, der sich nur diagonal vorwärts bewegen kann. Das Brett hat 0 oder mehr schwarze Teile und 1 oder mehr weiße Teile. Ein weißes Stück wird sich derzeit bewegen. Das weiße Stück kann diagonal davor über ein schwarzes Stück "springen", wenn das Quadrat direkt dahinter leer ist. Es ist möglich, einen weiteren Sprung von dieser Position aus zu machen, wenn sich diagonal davor ein weiteres schwarzes Stück in beide Richtungen befindet. Die Erfassung ist obligatorisch, daher ist es illegal, keinen verfügbaren Sprung zu machen. Es ist jedoch nicht zwingend erforderlich, einen Pfad zu wählen, der die Anzahl der Sprünge maximiert. Grundsätzlich bedeutet dies, dass diese Bewegung illegal ist, wenn Sie einen Sprung machen und es einen weiteren möglichen Sprung von der Endposition gibt. Stückpositionen verwenden das folgende Nummerierungsschema:

Schachbrettnummerierung


Regeln

Eingaben:

  • Eine Liste von Zahlen, die schwarze Teile darstellen.

  • Eine Liste von Zahlen, die weiße Teile darstellen.

  • Eine Ausgangsposition für das weiße Stück

  • Die Endposition für das weiße Stück

Ausgabe:

  • Ein wahrer Wert, wenn der Zug gültig ist, andernfalls ein falscher Wert


Sie können davon ausgehen, dass ein weißes Stück immer die Ausgangsposition einnimmt.

Wenn es Ihnen passt, können Sie davon ausgehen, dass das erste weiße Teil in der Liste der weißen Teile die Startposition enthält, anstatt Eingabe 3 zu akzeptieren.

Standard Code Golf Regeln. Wenig Bytes gewinnen.


Testfälle

Zur Veranschaulichung ist O die Startposition, X die Endposition, B sind schwarze Teile und W sind weiße Teile

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 _
aoemica
quelle
3
Ich schlage einen Testfall wie B=[8,15,23,24];W=[27]bei jedem von M=[27,4]und M=[27,20]1 vor. Er gibt eine Richtungsänderung. 2 Es wird eine Frage beantworten, die ich habe: Sind beide gültig oder müssen die längeren genommen werden? ("Die Erfassung ist obligatorisch, daher ist es illegal, keinen verfügbaren Sprung zu machen" schlägt vor, dass beide gültig sind, obwohl ich nicht weiß, warum Sie es illegal machen, wenn möglich nicht zu erfassen. Vielleicht möchten Sie also als nehmen viele Stücke wie möglich?)
Jonathan Allan
Entschuldigung, ich weiß nicht, wie man (englische) Dame spielt . Würde es Ihnen etwas ausmachen, weitere Details zu einem legalen Schritt hinzuzufügen?
tsh
1
Hier finden Sie eine Zusammenfassung der Testfälle im STDIN-freundlichen Format.
Arnauld
Die Erfassung ist obligatorisch, daher ist es illegal, keinen verfügbaren Sprung zu machen. Was bedeutet "einen Sprung machen"?
Erik der Outgolfer
1
@ JonathanAllan Ich glaube, ich habe Ihre Frage in der Erklärung angesprochen und die Testfälle hinzugefügt.
Aoemica

Antworten:

1

Das war eine Herausforderung :) * Fehler behoben (Bytes hinzugefügt)

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

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]

Probieren Sie es online aus!

DanielIndie
quelle
Ich denke, Sie können >>2&1anstelle von verwenden /4%2|0.
Arnauld
Testfall: [10, 3], [14], 14, 7fehlgeschlagen.
tsh
@tsh behoben :), wenn mehr Testfälle fehlgeschlagen sind, lass es mich wissen
DanielIndie