チェッカーズ:キングミー?


14

チャレンジ:

チェッカーボードが与えられた場合、可能な限り最小の動きを出力し(黒がまったく動かないと仮定して)、可能であれば赤の駒をキングします。

ルール

赤の側は常に下になりますが、それらの駒はどの列からでも開始できます(王の列であっても到達する必要があります)。黒のピースは静止しているため、赤の動きの間に移動することはありませんが、キャプチャされるとボードから削除されます。ピースはボード上の任意のスペースで開始できることに注意してください。これは通常のチェッカーの再生方法ではありませんが、プログラムでこれらを解決できる必要があります。(入力5を参照)ただし、チェッカーピースは斜めにのみ移動する必要があります(入力3を参照)。最初のキャプチャーがチェーンの前方にある場合、逆方向キャプチャーが許可されます(入力7を参照)。

入力:

ボードスペースが次の文字として定義されている8x8チェッカーボード(一貫性がある限り自由に代替を使用できます):

。- 空の

R-赤いピース

B-黒い部分

出力:

ボードの一番上の列(黒の側)の王の列に入ることによって「王」になるために赤い駒が必要な動きの最小数。赤いピースをキングすることが不可能な場合は負の数(つまり、黒が最初の行全体を占める)。

入力1:

. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
R . . . . . . .

出力1:

7

入力2:

. . . . . . . .
. . . . . . . .
. . . . . B . .
. . . . . . . .
. . . B . . . .
. . . . . . . .
. B . . . . . .
R . . . . . . .

出力2:

2

入力3:

. B . B . B . B
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
R . . . . . . .

出力3:

-1

入力4:

. . . . . . . R
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
R . . . . . . .

出力4:

0

入力5:

. . . . . . . .
. . . . . . . .
. . . . . . . .
. B . . B . . .
B . . . . B . .
. B . B . . . .
. . B . . B . .
. . . R R . . .

出力5:

4

入力6:

. . . . . . . .
. . . . . . . .
. B . . . . . .
. . B . . . . .
. B . B . . . .
. . . . R . . .
. . . B . . . .
. . . . R . . .

出力6:

2

入力7:

. . . . . . . .
. . . . . . . .
. . B . . . . .
. . . . . . . .
. . B . . . . .
. B . B . B . .
. . . . B . . .
. . . . . R . R

出力7:

4

得点:

これはなので、バイト単位の最短コードが優先されます。


1
ダブル/トリプルジャンプできるので、2番目のテストケースは2にすべきではありませんか?
DJMcMayhem

入力として整数の配列の状態配列は大丈夫ですか?
ジョナサンアラン

1
難しいことがわかる別のテストケースを追加しました。最適なソリューションを実現するために、複数のジャンプ、複数のピース、後方へのジャンプが含まれます。
orlp

1
@orlpうーん、私は赤い駒はどれも王ではないので後方に移動することはできないと言いました(そのため挑戦の要点です)が、一部の人々は、最初のキャプチャがフォワードの場合、ピースをキングしました。私はこれを以前は知らなかったので、ルールに追加します。
ヨドル

1
ooooooooh、赤いピースを1つだけ選ぶ必要はありません。彼らはチームを組むことができます。わかった
グレッグマーティン

回答:


4

JavaScript(ES6)、354 322バイト

配列を入力として受け取ります:

  • 0 =空の正方形
  • 1 =赤いピース
  • 2 =ブラックピース

最適な移動数を返します。解決策がない場合は99を返します。

それは非常に高速ですが、もっとゴルフすることができます。

F=(b,n=0,C=-1,i)=>b.map((v,f,X,T,x=f&7,y=f>>3)=>v-1||(y&&n<m?[-9,-7,7,9].map(d=>(N=c=X=-1,r=(d&7)<2,T=(t=f+d)>=0&t<64&&(x||r)&&(x<7||!r)?(!b[t]&d<0)?t:b[t]&1?N:b[t]&2&&(d<0&y>1|d>0&C==f)?(X=t,x>1||r)&&(x<6|!r)&&!b[t+=d]?c=t:N:N:N)+1&&(b[f]=b[X]=0,b[T]=1,F(b,n+!(C==f&c>N),c,1),b[f]=1,b[X]=2,b[T]=0)):m=n<m?n:m),m=i?m:99)|m

var test = [
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,2,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,2,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,2,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,2,0,2,0,2,0,2,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,0,0,0,0,0,0,1,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,2,0,0,2,0,0,0,
    2,0,0,0,0,2,0,0,
    0,2,0,2,0,0,0,0,
    0,0,2,0,0,2,0,0,
    0,0,0,1,1,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,2,0,0,0,0,0,0,
    0,0,2,0,0,0,0,0,
    0,2,0,2,0,0,0,0,
    0,0,0,0,1,0,0,0,
    0,0,0,2,0,0,0,0,
    0,0,0,0,1,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,2,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,2,0,0,0,0,0,
    0,2,0,2,0,2,0,0,
    0,0,0,0,2,0,0,0,
    0,0,0,0,0,1,0,1
  ]
];

test.forEach((b, n) => {
  console.log("Test #" + (n + 1) + " : " + F(b));
});


99はおそらく大丈夫です。8x8ボードで99の動きをとる実際のソリューションは想像できません。良くやった!
Yodle
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.