チェッカーチェッカー


10

このチャレンジの目標は、移動がイングリッシュチェッカーの移動かどうかを判断することです。

この課題では、8x8ボードを使用します。動かされた駒は、対角線方向にのみ動くことができる男性(キングではない)として扱われるべきです。ボードには0個以上の黒い部分と1個以上の白い部分があります。現在、白い部分が1つ移動しています。真後ろの正方形が空の場合、白い部分はその前にある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 2018

1
以下は、 STDINに適した形式のテストケースの概要です。
アーノールド

キャプチャは必須であるため、利用可能なジャンプを行わないことは違法です。「ジャンプする」とはどういう意味ですか?
Erik the Outgolfer

1
@JonathanAllan私は説明であなたの質問に対処し、テストケースを追加したと思います。
aoemica

回答:


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 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.