Checkers Checker

10

Le but de ce défi est de déterminer si un mouvement est un mouvement légal des Dames anglaises .

Ce défi utilisera une carte 8x8. Une pièce déplacée doit être traitée comme un homme (pas un roi) qui ne peut avancer qu'en diagonale. Le plateau aura 0 ou plusieurs pièces noires et 1 ou plusieurs pièces blanches. Une pièce blanche sera actuellement en mouvement. La pièce blanche peut "sauter" par-dessus une pièce noire en diagonale devant elle si le carré directement derrière elle est vide. Il est possible de faire un autre saut à partir de cette position s'il y a une autre pièce noire en diagonale devant elle. La capture est obligatoire, il est donc illégal de ne pas effectuer de saut disponible. Cependant, il n'est pas obligatoire de prendre un chemin qui maximise le nombre de sauts. Fondamentalement, cela signifie que si vous faites un saut et qu'il y a un autre saut possible depuis la position de fin, ce mouvement est illégal. Les positions des pièces utilisent le schéma de numérotation suivant:

Numérotation en damier


Règles

Contributions:

  • Une liste de nombres qui représentent des pièces noires.

  • Une liste de nombres qui représentent des pièces blanches.

  • Une position de départ pour la pièce blanche

  • La position finale de la pièce blanche

Production:

  • Une valeur véridique si le mouvement est valide, sinon une valeur de falsey


Vous pouvez supposer qu'une pièce blanche occupera toujours la position de départ.

Si cela vous convient, vous pouvez supposer que la première pièce blanche de la liste des pièces blanches contiendra la position de départ au lieu d'accepter l'entrée 3.

Règles de golf à code standard. Le moins d'octets gagne.


Cas de test

Pour illustrer, O est la position de départ, X est la position de fin, B sont des pièces noires et W sont des pièces blanches

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
la source
3
Je suggère un cas de test comme B=[8,15,23,24];W=[27]avec chacun des 1. M=[27,4]et M=[27,20]cela donnera un changement de direction. 2 il répondra à une question que j'ai: sont-ils tous les deux valides ou faut-il prendre plus de temps? ("La capture est obligatoire, donc il est illégal de ne pas faire un saut qui est disponible" suggère que les deux sont valides, bien que je ne sache pas pourquoi vous rendez illégal de ne pas capturer si possible, alors peut-être voulez-vous prendre autant de pièces que possible?)
Jonathan Allan
Désolé, je ne sais pas jouer aux dames (en anglais) . Pourriez-vous ajouter quelques détails sur ce qu'est une décision légale?
tsh
1
Voici un résumé des cas de test dans un format compatible STDIN.
Arnauld
La capture est obligatoire, il est donc illégal de ne pas effectuer de saut disponible. que signifie "faire un saut"?
Erik the Outgolfer le
1
@JonathanAllan Je pense avoir répondu à votre question dans l'explication et ajouté les cas de test.
aoemica

Réponses:

1

C'était difficile :) * correction de bugs (octets ajoutés)

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

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]

Essayez-le en ligne!

DanielIndie
la source
Je pense que vous pouvez utiliser à la >>2&1place de /4%2|0.
Arnauld
Testcase: [10, 3], [14], 14, 7échoué.
tsh
@tsh fixed :), si plus de cas de test ont échoué, faites le moi savoir
DanielIndie