Kral piyonu yakalayabilir mi?


26

Dört tamsayı x 1 , y 1 , x 2 ve y 2 girdi alındığında , satrançtaki beyaz bir kralın (koordinatlarla ( x 1 , y 1 )) siyah bir piyon yakalayıp yakalayamayacağını (koordinatlarla ( x 2 , y) gösterir. 2 )) ve piyon bir kraliçeye olabildiğince çabuk terfi etmek için hareket ediyorsa onu yakalayın.

Kurulun koordinatları aşağıdaki gibidir:

       first coordinate (x)
             12345678

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

Hareket etmenin beyaz olduğunu (kralın sırası) ve her iki oyuncunun da en iyi şekilde oynadığını varsayalım (kral, piyonu yakalamak için mümkün olduğu kadar hızlı hareket edecek ve piyon teşvik etmek için olabildiğince hızlı hareket edecektir). Giriş koordinatları her zaman farklı olacak ve piyon asla 8'lik bir y koordinatı ile başlamayacak.

Kral her dönüşte herhangi bir yönde bir kare hareket eder (diyagonal olarak hareket edebilir) ve piyon, başlangıç ​​pozisyonunda değilse (koordinat sistemimizle y koordinatındayken), sadece bir boşluk ileri alabilir (y koordinatını düşürür). 7), bu durumda iki boşluk ileri hareket edebilir.

Girdi, boşluk / virgülle ayrılmış bir dize, bir dizi / tamsayı dizisi veya dört işlev / komut satırı / etc argümanı olarak verilebilir. Koordinatlar, hangi sıranın en uygun / golfyere uygun olduğunu gösterebilir (bu nedenle, girişi [y 2 , y 1 , x 1 , y 2 ] olarak kabul etmek, tutarlı olduğu sürece tamamdır). Çıktının bir ya da sahte değeri olması gerekir .

Bu olduğundan, bayttaki en kısa kod kazanır.

Truthy test durumları :

5 3 3 2

6 1 1 7

3 3 3 2

4 1 4 7

7 7 1 7

1 8 1 7

Sahte test durumları :

6 4 3 2

8 8 1 7

3 4 3 2


Koordinatların sırasını seçebilir miyiz yoksa öyle x1 y1 x2 y2mi olmalı ?
Dennis,

11
1 8 1 7Kralın piyondan önce yakaladığı test alanını iki boşluk taşıyabilirim. Sanırım tüm cevaplar şimdi yanlış anladı. Bu durum sorunu daha da zorlaştırıyor.
xnor

1
@ Neil, çünkü sayılara dönüşüm çok sıkıcı ve hiçbir şey
katmıyor

1
@ Neil Burada zaten cebirsel notasyon içeren çok sayıda mesaj var ve asıl zorluğa odaklanmak istedim.
Doorknob

2
@kaine Piyon, kralın terfi ettirdiği hamleden önce veya almadan önce dayanamadığı sürece kral için önemli bir tehdit oluşturmaz. Kralın kontrole taşınması gerekmez, çünkü her zaman yapabileceği eşit derecede iyi bir hamle vardır.
Neil

Yanıtlar:


3

Jöle , 33 bayt

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

Bu program koordinatları x2\nx1\ny2\ny1STDIN'den okur . Çevrimiçi deneyin!

Rekabet etmeyen sürüm

Ne yazık ki, Jelly tercümanı bu soru gönderildiğinde bir hata yaptı. Bahsedilen hata ikiden fazla komut satırı argümanı kabul etmesini engelledi. Jelly'in en yeni sürümü verilen görevi 23 byteta çözebilir .

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

Çevrimiçi deneyin!


18

Python 2, 53 40

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

Kralın koordinatları (x, y)ve piyonu var (p, q).

Üç önemli vaka var:

  1. Piyon 7, kral ise 8. sırada. Piyonu yakalamak için kralın aynı dosyada veya bitişikte olması gerekir.

    Sonuç: q = 7 ⋀ y = 8 → |x - p| ≤ 1

  2. Piyon 7. sırada. Piyonu yakalamak için kral altı dosyada olmalı.

    Sonuç: q = 7 → |x - p| ≤ 6

  3. Piyon daha düşük bir sırada. Piyonu yakalamak için kralın, piyondan sonra en fazla bir hamlede tanıtım meydanına ulaşması gerekir.

    Sonuç: q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q

Benim çözümüm bu şartların aşağıladığı durum. Umarım bu sefer hatalar olmaz.


2
Nasıl kesme hakkında abssahip max(y-1,x-p,p-x)?
xnor

Olmamalı f(1,8,1,7), Trueçünkü kral derhal piyonu ele geçirir mi? Bence kral derhal ele geçirirse 7. piyon sırasının 7. sıra olarak değerlendirilemediği bir incelik var.
xnor

@xnor Ben şimdi (kötü bir golf yolu ile) sabit olduğunu düşünüyorum.
grc

1
Son koşulu tersine çevirdiyseniz, orve arasındaki boşluğu kaldırabilirsiniz -2.
xsot

@xsot bahşiş için teşekkürler. Yaklaşımımı değiştirdim ve şimdi biraz daha düşürdüm.
grc

2

Prolog, 48 42 bayt

Kod:

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

Örnekler:

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

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

Prolog için çoğu ile kıyaslandığında kötü bir mücadele değil.

Düzenleme: grc'ın Python 2 cevabında kullanılan formüle geçerek 6 bayt kaydedildi .
Maalesef Prolog, python'ın yapabileceği gibi zincirleme zincirleme yapamaz ve tamsayı bölmesi, yüzdürme bölmesinden 1 bayt daha uzundur.

Burada çevrimiçi deneyin


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)

Ben Math.abs, Math.min, Math.max kullanarak değil bayt kurtardı umarım

Yedi satırdaki piyon, sadece kral yakın bir sütunda değilse ve boşluk dbırakmadan 2 boşluktan kaçabilir - bu yüzden 7'yi 6 ile değiştirmeden önce bir kontrol yapılır .

Konsolda çalıştırılacak test çantası:

;[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)]

Sonuç: [true, true, true, true, false, false, false]


0

Ruby, 50 bayt

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

Argümanlar (kral x, kral y, piyon x, piyon y), tüm tamsayılardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.