跳棋跳棋


10

这项挑战的目标是确定此举是否是合法的英国跳棋棋子

这项挑战将使用8x8电路板。移动的棋子应被视为只能对角移动的人(不是国王)。板上将有0个或更多的黑色块和1个或更多的白色块。一块白色的东西目前正在移动。如果直接在其后面的正方形为空,则白色块可以“跳跃”到其前面的一个黑色块上。如果在它的对角线前面的任何一个方向都有另一个黑色块,则可能会从该位置再跳一次。捕获是强制性的,因此不进行可用的跳转是非法的。但是,并不一定要采用最大化跳跃次数的路径。基本上,这意味着,如果您进行了跳跃,并且从终点位置跳出了另一个可能的跳跃,则该移动是非法的。件位使用以下编号方案:

棋盘编号


规则

输入:

  • 代表黑块的数字列表。

  • 代表白色的数字列表。

  • 白棋的起始位置

  • 白片的结束位置

输出:

  • 如果移动有效,则为真实值,否则为假值


您可以假设一块白色将始终占据起始位置。

如果方便,您可以假定白名单中的第一个白名单将包含起始位置,而不是接受输入3。

标准代码高尔夫规则。最少的字节数获胜。


测试用例

例如,O是开始位置,X是结束位置,B是黑色块,W是白色块

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
我建议使用B=[8,15,23,24];W=[27]M=[27,4]M=[27,20]1.相同的测试用例,它将改变方向。2它会回答我的一个问题:都是有效的还是必须更长的时间?(“捕获是强制性的,因此不进行可用的跳转是非法的。”这两种建议都是有效的,尽管我不知道为什么您将非法捕获视为非法,所以也许您是想越多越好?)
乔纳森·艾伦

抱歉,我不知道该怎么玩(英语)跳棋。您是否愿意添加一些有关法律措施的更多详细信息。
tsh

1
这是 STDIN友好格式的测试用例的摘要
Arnauld

捕获是强制性的,因此不进行可用的跳转是非法的。“跳”是什么意思?
暴民埃里克(Erik the Outgolfer)

1
@JonathanAllan我想我在解释中回答了您的问题,并添加了测试用例。
aoemica '18

Answers:


1

这很有挑战性:) *修复了错误(增加了字节)

的JavaScript(Node.js的)197个 193 191 185 181 186字节

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]

在线尝试!


我认为您可以使用>>2&1代替/4%2|0
Arnauld

测试用例:[10, 3], [14], 14, 7失败。
tsh

@tsh已修复:),如果更多测试用例失败,请通知我
DanielIndie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.