ชื่อสำรองของ: ChessMoveQ
รับรายการขององค์ประกอบสูงสุด 32 รายการแต่ละรายการประกอบด้วย 4 องค์ประกอบและรายการที่สองที่มี 4 องค์ประกอบพิจารณาว่าการย้ายที่มีรายละเอียดในอินพุตที่สองเป็นการย้ายหมากรุกที่ถูกต้องหรือไม่
รายการแรกระบุตำแหน่งของทั้ง 32 ชิ้นบนกระดาน แต่ละองค์ประกอบจะเป็นไปตามโครงสร้าง<colour>, <piece-name>, <x-coord>, <y-coord>
เช่น["W", "K", 5, 1]
ซึ่งบ่งชี้ว่าราชาขาวนั้นอยู่บน5, 1
( e1
บนกระดานหมากรุกทั่วไป) องค์ประกอบทั้งหมดของอินพุตแรกจะไม่ซ้ำกัน <x-coord>
และ<y-coord>
จะอยู่ระหว่าง 1 ถึง 8 เสมอตัวอย่างหนึ่ง ได้แก่ :
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8],
["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7],
["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7],
["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3],
["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1],
["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2],
["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
ซึ่งจะเป็นตัวแทนของคณะกรรมการ:
อินพุตที่สองจะประกอบด้วยโครงสร้างเดียวกันกับรายการย่อยของรายการแรก แต่แทนที่จะเป็นพิกัด x และ y เพื่อระบุตำแหน่งของชิ้นส่วนพวกเขาจะระบุตำแหน่งที่พยายามย้ายไป
สำหรับตัวอย่างข้างต้นการเคลื่อนไหวที่ถูกต้องอาจเป็นได้["W", "B", 4, 3]
(อธิการย้ายหนึ่งช่องไปข้างหน้าและไปทางซ้าย) และการเคลื่อนไหวที่ไม่ถูกต้องอาจเป็น["B", "R", 4, 1]
เหมือนเกมโกงจะต้องเคลื่อนที่ผ่านอัศวินและผู้จำนำเพื่อไปที่จัตุรัส ขณะที่การย้ายอาจจะหมายถึงหลายชิ้นในช่วงเวลาที่คุณต้องทดสอบว่าใด ๆของชิ้นส่วนที่ระบุสามารถทำให้การย้ายที่ไม่เพียงหนึ่งของพวกเขา ตัวอย่างเช่นตัวอย่างแรกใช้ได้กับอธิการเพียงคนเดียว แต่ยังคงเป็นการเคลื่อนไหวที่ถูกต้อง อย่างไรก็ตาม rook ดำไม่สามารถทำการเคลื่อนไหวที่สองดังนั้นจึงไม่ถูกต้อง
งานของคุณคือพิจารณาว่าการย้ายที่มีรายละเอียดในอินพุตที่สองเป็นการย้ายหมากรุกที่ถูกต้องหรือไม่ ความถูกต้องของกฎจะแตกต่างกันไปขึ้นอยู่กับชิ้นส่วนที่พยายามเคลื่อนย้าย (คลิกที่ชื่อของชิ้นส่วนสำหรับแผนภาพการเคลื่อนที่ที่ถูกต้อง):
- ชิ้นส่วนใด ๆ : ไม่มีชิ้นใดสามารถเคลื่อนย้ายไปยังช่องสี่เหลี่ยมที่ถูกครอบครองอยู่แล้วหรือออกจากกระดานยกเว้นว่าช่องนั้นจะถูกครอบครองโดยชิ้นส่วนจากสีอื่น ตัวอย่างเช่นชิ้นส่วนสีขาวอาจย้ายไปยังสี่เหลี่ยมจัตุรัสที่ครอบครองโดยชิ้นส่วนสีดำ แต่ไม่ใช่ชิ้นส่วนสีขาว นอกจากนี้ไม่มีชิ้นใดยกเว้นอัศวินสามารถย้ายไปยังช่องสี่เหลี่ยมที่ถูกบดบังด้วยชิ้นส่วนอื่นโดยตรง
- ย้ายโดยชิ้นBไปที่ตารางCคือ "อุปสรรคโดยตรง" โดยชิ้นถ้าโดยตรงในตรง (มุมฉากหรือแนวทแยง) สายระหว่างBและC
- ทุกชิ้น : ตำแหน่งของกษัตริย์สามารถส่งผลต่อความถูกต้องของการเคลื่อนไหวได้ หากตรงตามเงื่อนไขสองข้อใดข้อหนึ่งการย้ายจะไม่ถูกต้อง:
- เผยให้เห็นกษัตริย์เพื่อตรวจสอบโดยการย้ายชิ้นส่วนในด้านเดียวกันเป็นกษัตริย์ที่ใกล้สูญพันธุ์ สิ่งนี้ใช้ได้เฉพาะเมื่อชิ้นส่วนที่ไม่ใช่ของฝ่ายตรงข้ามเคลื่อนไหวเท่านั้นแทนที่จะเป็นชิ้นส่วนที่เคลื่อนไหวเพื่อย้ายกษัตริย์เพื่อตรวจสอบ
- ออกจากกษัตริย์ในการตรวจสอบในกรณีที่มีการย้ายออกจากเช็ค ดังนั้นหากพระราชาอยู่ในการตรวจสอบและการเคลื่อนไหวกำหนดว่าชิ้นส่วนอื่นจะย้ายมันเป็นย้ายที่ไม่ถูกต้องเว้นแต่ชิ้นอื่นจะป้องกันการตรวจสอบ ชิ้นหนึ่งสามารถป้องกันการตรวจสอบด้วยวิธีใดวิธีหนึ่งจากสองวิธี: ไม่ว่าจะเป็นการตรวจสอบชิ้นงานหรือขัดขวางเส้นทางระหว่างการตรวจสอบชิ้นงานและกษัตริย์
- "เช็ค" เป็นสถานการณ์ที่ฝ่ายตรงข้ามของกษัตริย์สามารถ (ถ้าเป็นตาของพวกเขาที่จะย้าย) ถูกต้องตามกฎหมายย้ายชิ้นส่วนไปยังกษัตริย์ที่ กฎนี้ใช้ไม่ได้ซ้ำ ๆ เช่นกษัตริย์อยู่ในการตรวจสอบแม้ว่าการเคลื่อนไหวโดยฝ่ายตรงข้ามกับกษัตริย์ที่จะออกจากกษัตริย์ของตัวเองในการตรวจสอบ
- เบี้ย : จำนำสามารถย้ายไปข้างหน้า (เช่นขึ้นไปถ้าสีขาวลงไปถ้าสีดำ) หนึ่งตารางไปยังตารางที่ว่าง นอกจากนี้ยังมีสามสถานการณ์พิเศษ:
- หากเบี้ยยังไม่ได้ย้าย (คุณสามารถกำหนดได้โดยใช้พิกัด Y; จำนำสีขาวไม่ได้ย้ายถ้าพิกัด Y ของพวกเขาคือ 2, เบี้ยสีดำไม่ได้ย้ายถ้าพิกัดของพวกเขาคือ 7) จำนำ ได้รับอนุญาตให้ย้ายสองช่องไปข้างหน้าไปยังช่องว่าง
- หากมีชิ้นส่วนของฝ่ายตรงข้ามในแนวทแยงหน้าเบี้ย (เช่นในตารางไปทางทิศตะวันตกเฉียงเหนือหรือตะวันออกเฉียงเหนือของเบี้ยถ้ามันเป็นสีขาวหรือไปทางตะวันตกเฉียงใต้หรือตะวันออกเฉียงใต้ถ้ามันเป็นสีดำ) จำนำได้รับอนุญาตให้ย้ายไปยังตารางที่มีปัญหา
- หากจำนำย้ายไปพิกัด Y สุดท้าย (8 สำหรับสีขาวหรือ 1 สำหรับสีดำ) ในกฎหมากรุกปกติจะต้องได้รับการเลื่อนตำแหน่งให้เป็นราชินี, โกง, อัศวินหรือบิชอปที่มีสีเดียวกัน สำหรับวัตถุประสงค์ของคำถามนี้ตัวเลือกการส่งเสริมการขายนั้นไม่เกี่ยวข้องกับการย้ายที่ถูกต้องหรือไม่ (และไม่สามารถแสดงในรูปแบบการป้อนข้อมูล) ได้ แต่ต้องมีการอนุญาตให้เลื่อนการจำนำที่จะส่งผลให้มีการเลื่อนตำแหน่ง
- บิชอป : บิชอปสามารถเคลื่อนที่ได้ระหว่าง 1 ถึง 8 กำลังสองตามแนวเส้นทางระหว่าง intercardinal ที่ไม่มีสิ่งกีดขวาง (เช่นเส้นทแยงมุม)
- อัศวิน : อัศวินสามารถเคลื่อนที่เป็น
L
รูปร่างได้ประกอบด้วยการเคลื่อนไหวอย่างใดอย่างหนึ่งต่อไปนี้ (เทียบเท่า):- สี่เหลี่ยมจัตุรัสเดียวในทิศทางใดก็ตามตามด้วยการเลี้ยว 90/270 °ตามด้วยการเคลื่อนที่สุดท้ายของ 2 สี่เหลี่ยมไปข้างหน้า
- 2 สี่เหลี่ยมในทิศทางที่สำคัญใด ๆ ตามมาด้วยการเลี้ยว 90/270 °ตามด้วยการเคลื่อนที่ครั้งสุดท้ายของจตุรัสเดี่ยวไปข้างหน้า
- Rooks : Rooks สามารถเคลื่อนที่ระหว่าง 1 ถึง 8 กำลังสองตามแนวเส้นทางที่ไม่มีสิ่งกีดขวางใด ๆ
- ควีนส์ : ควีนส์สามารถเคลื่อนที่ได้ระหว่าง 1 ถึง 8 กำลังสองตามแนวเส้นทางที่ไม่มีสิ่งกีดขวางใด ๆ
- Kings : Kings เคลื่อนไหวเหมือนราชินียกเว้นว่าพวกมันถูก จำกัด ให้เคลื่อนที่เพียงหนึ่งตารางต่อการเคลื่อนไหวเท่านั้น (เช่น King สามารถย้ายไปยังจตุรัส cardinally หรือ diagonally ที่อยู่ติดกัน) เพื่อเป็นการเตือนคุณไม่สามารถเคลื่อนไหวได้ซึ่งทำให้กษัตริย์ของคุณอยู่ในการตรวจสอบ ดังนั้นคุณไม่สามารถย้ายกษัตริย์ของคุณเข้าสู่การตรวจสอบเช่นกัน
กฎของหมากรุกยังมีการเคลื่อนไหวพิเศษที่เรียกว่า "castling" และ "en passant" อย่างไรก็ตามเนื่องจากความถูกต้องตามกฎหมายของการเคลื่อนไหวเหล่านี้ขึ้นอยู่กับประวัติของเกมไม่ใช่แค่ตำแหน่งปัจจุบัน (และเนื่องจากการคาสต์ต้องใช้การเคลื่อนที่สองชิ้นพร้อมกันซึ่งไม่เหมาะกับรูปแบบอินพุต) คุณจึงไม่ควรพิจารณาการเคลื่อนไหวเหล่านี้ ที่จะมีอยู่ (เช่นการเคลื่อนไหวที่จะ castling หรือ en passant ควรพิจารณาว่าผิดกฎหมาย)
คุณสามารถแสดงผลลัพธ์ที่แตกต่างกันสองรายการเพื่อระบุความถูกต้องของการเคลื่อนไหวและคุณสามารถป้อนข้อมูลในวิธีที่คุณต้องการ คุณอาจเลือกการจัดทำดัชนีมากกว่าการจัดทำดัชนีสำหรับตำแหน่งที่คุณต้องการ นี่คือรหัสกอล์ฟรหัสที่สั้นที่สุดจึงชนะ!
กรณีทดสอบ
Board
Move => Output (Reason)
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8], ["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7], ["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7], ["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3], ["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1], ["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2], ["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
["W", "R", 8, 2] => True (The rook on h1 can move forward one)
[['B', 'K', 6, 8], ['B', 'Q', 1, 7], ['B', 'N', 1, 3], ['B', 'N', 7, 1], ['B', 'B', 8, 8], ['B', 'B', 2, 5], ['B', 'R', 4, 3], ['B', 'R', 1, 5], ['B', 'P', 5, 5], ['B', 'P', 7, 2], ['B', 'P', 5, 7], ['B', 'P', 5, 6], ['B', 'P', 4, 4], ['W', 'K', 7, 3], ['W', 'Q', 3, 2], ['W', 'N', 4, 8], ['W', 'N', 7, 5], ['W', 'B', 1, 1], ['W', 'B', 8, 1], ['W', 'R', 1, 8], ['W', 'R', 3, 7], ['W', 'P', 8, 2], ['W', 'P', 6, 3], ['W', 'P', 4, 2], ['W', 'P', 1, 4], ['W', 'P', 8, 7]]
['W', 'N', 1, 5] => False (Neither knight to move to a5 from where they are)
[['B', 'K', 7, 3], ['B', 'Q', 2, 4], ['B', 'N', 5, 2], ['B', 'N', 1, 6], ['B', 'B', 7, 7], ['B', 'B', 1, 8], ['W', 'K', 7, 1], ['W', 'Q', 6, 1], ['W', 'N', 5, 6], ['W', 'N', 3, 3], ['W', 'B', 2, 2], ['W', 'B', 6, 5]]
['B', 'K', 8, 3] => False (The white bishop would put the king in check)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 5, 8] => False (The white queen currently has the king in check, and this move doesn't prevent that)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 7, 5] => True (The king is in check, and the knight blocks that)
[['B', 'K', 8, 3], ['B', 'Q', 6, 5], ['B', 'N', 7, 8], ['B', 'N', 3, 7], ['B', 'B', 4, 1], ['B', 'B', 1, 1], ['W', 'K', 7, 7], ['W', 'Q', 7, 1], ['W', 'N', 2, 2], ['W', 'N', 1, 3], ['W', 'B', 3, 5]]
['B', 'B', 2, 2] => True (takes the white knight)
[['B', 'K', 6, 1], ['B', 'Q', 6, 2], ['W', 'K', 8, 1]]
['B', 'Q', 7, 1] => True (Smallest checkmate possible, in terms of bounding box)
ความท้าทายนี้ได้รับการทดลองใช้ผลิตภัณฑ์ มันได้รับ downvotes โดยไม่มีคำอธิบายใด ๆ ดังนั้นฉันจึงตัดสินใจโพสต์ไว้