王はポーンをキャッチできますか?


26

4つの整数x 1y 1x 2、およびy 2の入力が与えられると、チェスの白い王(座標(x 1y 1)を持つ)が黒いポーン(座標(x 2yを持つ)2))ポーンが可能な限り速く女王に昇格するように動いている場合、それをキャプチャします。

ボードの座標は次のとおりです。

       first coordinate (x)
             12345678

           1 .#.#.#.#
           2 #.#.#.#.
           3 .#.#.#.#
  second   4 #.#.#.#.
coordinate 5 .#.#.#.#
    (y)    6 #.#.#.#.
           7 .#.#.#.#
           8 #.#.#.#.

移動するのは白であり(キングのターン)、両方のプレイヤーが最適にプレイすると仮定します(キングはポーンをキャッチするためにできるだけ速く移動し、ポーンはプロモートするためにできるだけ速く移動します)。入力座標は常に区別され、ポーンは8のy座標で開始することはありません。

キングはターンごとに任意の方向に1つの正方形を移動し(斜めに移動できます)、ポーンは初期位置(座標系、y座標の場合)でない限り、1スペースだけ前方に移動(y座標を減少)できます7)、この場合、2つのスペースを前方に移動できます。

入力は、空白/コンマ区切りの文字列、文字列/整数の配列、または4つの関数/コマンドライン/その他の引数として指定できます。座標は、最も便利/ゴルフ好きな順序で与えることができます(したがって、[y 2、y 1、x 1、y 2 ] として入力を受け入れても、一貫していれば問題ありません)。出力は、真偽値である必要があります

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

真実のテストケース

5 3 3 2

6 1 1 7

3 3 3 2

4 1 4 7

7 7 1 7

1 8 1 7

偽のテストケース

6 4 3 2

8 8 1 7

3 4 3 2


座標の順序を選択できますx1 y1 x2 y2か?
デニス

11
1 8 1 7ポーンが2つのスペースを移動する前にキングがキャプチャするテストケースをお勧めします。今ではすべての答えが間違っていると思います。この状況により、問題はさらに難しくなります。
-xnor

1
@Neil数値への変換は退屈であり、何も追加しないため
edc65

1
@Neil代数表記法に関係する投稿はすでにたくさんありますが、実際の課題に焦点を当てたいと思いました。
ドアノブ

2
@kaineポーンは、キングがプロモートする前または移動する前にポーンを引き受けることができない場合を除き、キングに大きな脅威を与えません。キングは常に同じように良い動きができるので、チェックする必要はありません。
ニール

回答:


3

ゼリー、33 バイト

‘»Ɠ_2<®
Ɠ©<7
:5+Ɠ>7$¤<1.4
Ɠ_ƓA2£Ŀ

このプログラムはx2\nx1\ny2\ny1、STDINから座標を読み取ります。オンラインでお試しください!

非競合バージョン

残念ながら、この質問が投稿されたとき、Jellyインタプリタにはバグがありました。このバグにより、3つ以上のコマンドライン引数を受け入れることができませんでした。Jellyの最新バージョンは、23バイトで特定のタスクを解決できます

⁶>7×5
_A+⁵>6$¤+¢’»⁶_2<⁵

オンラインでお試しください!


18

Pythonの2、53 40

lambda x,y,p,q:y-2<q>=abs(x-p)+q/7+y/8*5

王は座標(x, y)とポーンを持っています(p, q)

3つの重要なケースがあります。

  1. ポーンはランク7にあり、キングはランク8にあります。ポーンをキャプチャするには、キングが同じファイルまたは隣接するファイルに存在する必要があります。

    結果: q = 7 ⋀ y = 8 → |x - p| ≤ 1

  2. ポーンはランク7にあります。ポーンをキャプチャするには、キングは6ファイル以内になければなりません。

    結果: q = 7 → |x - p| ≤ 6

  3. ポーンはより低いランクにあります。ポーンを捕まえるためには、キングはポーンの後に最大で1つの動きでプロモーションスクエアに到達できなければなりません。

    結果: q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q

私の解決策は、まさにこれらの条件が満たされていることです。今回は間違いがないことを願います。


2
で切るのabsmax(y-1,x-p,p-x)どうですか?
xnor

ならないf(1,8,1,7)ことがTrue、王はすぐに駒を捕獲するために?キングがすぐに捕まえた場合、ポーンの行7を行6として扱うことができない微妙な点があると思います。
-xnor

@xnor私はそれが今修正されていると思います(ひどくゴルフされた方法で)。
-grc

1
最後の条件を逆にした場合、orとの間のスペースを削除できます-2
xsot

@xsot、ヒントをありがとう。アプローチを変えて、もう少し詳しく説明しました。
-grc

2

プロローグ、48 42バイト

コード:

p(X,Y,P,Q):-Y-2<Q,Q>=abs(X-P)+Q//7+Y//8*5.

例:

p(1,8,1,7).
true

p(3,4,3,2).
false

ほとんどの場合と比較して、Prologにとっての挑戦は悪くありません。

編集:grcのPython 2 answerで使用されている式に切り替えて、6バイトを保存しました。
残念ながら、PrologはPythonができるように比較を連鎖できません。整数除算は浮動小数点除算より1バイト長くなります。

こちらからオンラインでお試しください


0

JavaScript(ES6)、52

(x,y,u,t,d=x>u?x-u:u-x)=>(d>=y?d:y-1)<=(d<2|t<7?t:6)

Math.abs、Math.min、Math.maxを使用せずにバイトを節約したいと思っています

行7のポーンは、キングが近くの列にいない場合にのみ、2つのスペースを移動することから逃れることができます。 d 7を6に置き換える前にます。

コンソールで実行するテストケース:

;[f(5,3,3,2),f(6,1,1,7),f(3,3,3,2),f(1,8,1,7),f(6,4,3,2),f(8,8,1,7),f(3,4,3,2)]

結果: [true, true, true, true, false, false, false]


0

ルビー、50バイト

def f(a,b,c,d)(a-c).abs<=(d==7?6-b/8*5:d)&&b-d<2;end

引数は(キングx、キングy、ポーンx、ポーンy)、すべて整数です。

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