กษัตริย์สามารถรับจำนำได้หรือไม่?


26

รับอินพุตของจำนวนเต็มสี่จำนวนx 1 , y 1 , x 2และy 2 , เอาท์พุทว่าราชาขาวในหมากรุก (มีพิกัด ( x 1 , y 1 )) สามารถจับเบี้ยสีดำ (พร้อมพิกัด ( x 2 , y 2 )) และจับถ้าจำนำจะเลื่อนเพื่อส่งเสริมราชินีอย่างรวดเร็วที่สุด

พิกัดของกระดานมีดังนี้

       first coordinate (x)
             12345678

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

สมมติว่ามันเป็นสีขาวที่จะย้าย (ตาของกษัตริย์) และผู้เล่นทั้งสองเล่นอย่างดีที่สุด (กษัตริย์จะย้ายเร็วที่สุดเท่าที่เป็นไปได้ที่จะจับจำนำและจำนำจะย้ายเร็วที่สุดเพื่อส่งเสริม) พิกัดอินพุตจะแตกต่างกันเสมอและการจำนำจะไม่เริ่มต้นด้วยพิกัด y ที่ 8

กษัตริย์เคลื่อนหนึ่งสี่เหลี่ยมจัตุรัสในทิศทางใด ๆ ทุก ๆ เทิร์น (มันสามารถเคลื่อนที่ในแนวทแยงมุม) และจำนำสามารถเลื่อนไปข้างหน้าหนึ่งช่องว่าง (ลดพิกัด y ของมัน) เว้นแต่ตำแหน่งแรก (ด้วยระบบพิกัดของเราพิกัด y ของ 7) ในกรณีนี้มันสามารถเลื่อนไปข้างหน้าสองช่องว่าง

อินพุตสามารถถูกกำหนดเป็นสตริงที่คั่นด้วย whitespace- / comma อาร์เรย์ของสตริง / จำนวนเต็มหรืออาร์กิวเมนต์สี่ฟังก์ชัน / บรรทัดรับคำสั่ง / ฯลฯ พิกัดสามารถกำหนดได้ในลำดับใดก็ตามที่สะดวกที่สุด / เล่นกอล์ฟ (ดังนั้นการยอมรับอินพุตเป็น [y 2 , y 1 , x 1 , y 2 ] ก็โอเคตราบเท่าที่มันสอดคล้องกัน) การส่งออกจะต้องเป็นtruthy หรือค่า

เนื่องจากนี่คือรหัสที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ

กรณีทดสอบจริง :

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?
Dennis

11
ฉันขอแนะนำกรณีทดสอบ1 8 1 7ที่กษัตริย์รวบรวมก่อนที่จำนำสามารถย้ายสองช่องว่าง ฉันคิดว่าคำตอบทั้งหมดตอนนี้มันผิด สถานการณ์นี้ทำให้ปัญหาหนักขึ้นมาก
xnor

1
@ Neil เนื่องจากการแปลงเป็นตัวเลขน่าเบื่อและไม่ได้เพิ่มอะไรเลย
edc65

1
@ Neil มีโพสต์มากมายที่เกี่ยวข้องกับสัญลักษณ์เกี่ยวกับพีชคณิตและฉันต้องการที่จะมุ่งเน้นไปที่ความท้าทายที่แท้จริง
Doorknob

2
@ kaine ผู้จำนำไม่ได้เป็นภัยคุกคามที่สำคัญต่อราชาเว้นแต่ว่ากษัตริย์ไม่สามารถรับมันได้หรือก่อนที่มันจะโปรโมต กษัตริย์ไม่จำเป็นต้องย้ายเข้ามาตรวจสอบเพราะมีการเคลื่อนไหวที่ดีเท่า ๆ กันที่ทำได้
Neil

คำตอบ:


3

เยลลี่ 33 ไบต์

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

โปรแกรมนี้อ่านพิกัดx2\nx1\ny2\ny1จาก STDIN ลองออนไลน์!

รุ่นที่ไม่ใช่การแข่งขัน

น่าเสียดายที่ล่าม 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)

มีสามกรณีสำคัญ:

  1. การจำนำนั้นอยู่ในอันดับที่ 7 และราชาในอันดับที่ 8 ในการจับตัวจำนำนั้นกษัตริย์จะต้องอยู่ในไฟล์เดียวกันหรือที่อยู่ติดกัน

    ผล: q = 7 ⋀ y = 8 → |x - p| ≤ 1

  2. ผู้รับจำนำอยู่ในอันดับที่ 7 ในการจับตัวจำนำพระราชาจะต้องอยู่ภายในหกไฟล์

    ผล: q = 7 → |x - p| ≤ 6

  3. เบี้ยอยู่ในอันดับที่ต่ำกว่า ในการจับตัวจำนำนั้นกษัตริย์จะต้องสามารถไปถึงจตุรัสส่งเสริมการขายได้มากที่สุดหนึ่งครั้งหลังจากการจำนำ

    ผล: q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q

ทางออกของฉันเป็นเพียงเงื่อนไขเหล่านี้กอล์ฟลง หวังว่าจะไม่มีข้อผิดพลาดในครั้งนี้


2
วิธีการเกี่ยวกับการตัดabsด้วยmax(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

Prolog, 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 เมื่อเทียบกับส่วนใหญ่

แก้ไข:บันทึกไว้ 6 ไบต์โดยการเปลี่ยนสูตรที่ใช้ในการGRC ของงูหลาม 2 คำตอบ
น่าเสียดายที่ Prolog ไม่สามารถทำการเปรียบเทียบแบบลูกโซ่ได้เนื่องจากไพ ธ อนสามารถและการแบ่งจำนวนเต็ม 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

การจำนำที่แถวเจ็ดสามารถหลบหนีการเคลื่อนที่ 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

Ruby, 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.