ฉันเพิ่งได้แอป Sudoku ใหม่ที่ผลิตยากของ Sudoku ซึ่งไม่สามารถแก้ไขได้ด้วยกลยุทธ์มาตรฐาน ดังนั้นฉันต้องเรียนรู้ใหม่ ๆ หนึ่งในกลยุทธ์เหล่านี้เป็นY-Wing กลยุทธ์ มันถูกจัดอันดับภายใต้ "กลยุทธ์ที่ยากลำบาก" แต่จริงๆแล้วมันไม่ได้ยากขนาดนั้น
ตัวอย่าง
สำหรับกลยุทธ์นี้มีเพียง 4 เซลล์เท่านั้นที่มีความสำคัญ ดังนั้นฉันจึงไม่สนใจเซลล์อื่นทั้งหมดในภาพ
เราดูผู้สมัครทั้งหมดสำหรับแต่ละเซลล์ ในตัวอย่างต่อไปนี้เรามีมือถือที่มีผู้สมัครที่3 7
(นั่นหมายความว่าเราได้ปฏิเสธไปแล้วผู้สมัคร1 2 4 5 6 8 9
เช่นเพราะมี1
ในแถวเดียวกัน2
ในเดียวกันกล่อง 3x3, ... ), มือถือที่มีผู้สมัคร6 7
, เซลล์ที่มีตัวเลือก3 6
และเซลล์ที่มีตัว2 6
เลือก กลยุทธ์ Y-Wing จะแนะนำว่า6
สามารถลบออกจากผู้สมัครของเซลล์อย่างจริงจังปล่อยให้เป็นเพียง2
ผู้สมัครซึ่งคุณสามารถกรอกดังนั้นเราจึงพบจำนวนที่ถูกต้องและเป็นหนึ่งในการแก้ซูโดกุเต็มขั้น
ทำไมถึง6
ถูกลบ?
คำอธิบาย
ขอให้เราสมมติว่า6
จำนวนที่ถูกต้องสำหรับเซลล์อย่างจริงจัง ขณะนี้มี6
คอลัมน์อยู่ในคอลัมน์นี้ดังนั้นเราจึงสามารถลบออก6
จากผู้สมัครของเซลล์ด้านบนขวาเหลือเพียง a 7
ซึ่งเราสามารถกรอกได้สิ่งเดียวกันนี้เกิดขึ้นกับเซลล์ด้านซ้าย เราสามารถลบและกรอกข้อมูลใน6
3
ตอนนี้ถ้าเราดูที่เซลล์ด้านบนซ้ายเราจะได้รับความขัดแย้ง เพราะตอนนี้มีอยู่แล้ว7
ในแถวเดียวกันและ3
ในคอลัมน์เดียวกันเพื่อให้เราสามารถลบ7
และ3
ของผู้สมัครออกจากผู้สมัครที่ไม่ทั้งหมด ซึ่งเห็นได้ชัดว่าเป็นไปไม่ได้ ดังนั้น 6 ไม่สามารถเป็นจำนวนที่ถูกต้องของเซลล์อย่างจริงจัง
แม่นยำยิ่งขึ้น: หากเรามี 4 เซลล์พร้อมผู้สมัคร[A B] [A C] [C D] [B C]
(ตามลำดับนี้หรือหมุนเป็นวงกลม) และเซลล์เชื่อมต่อ (ผ่านแถวเดียวกันคอลัมน์เดียวกันหรือกล่อง 3x3 เดียวกัน) ในวงกลม (เซลล์ 1 เชื่อมต่อกับเซลล์ 2 ซึ่งเป็น เชื่อมต่อกับเซลล์ 3 ซึ่งเชื่อมต่อกับเซลล์ 4 ซึ่งเชื่อมต่อกับเซลล์ 1) กว่าที่คุณสามารถลบออกC
จาก[C D]
เซลล์ได้ มันเป็นสิ่งสำคัญที่สามเซลล์[A B]
, [A C]
และ[B C]
มีเพียงสองผู้สมัครแต่ละคน แตกต่างกันเซลล์[C D]
ซึ่งอาจมีมากกว่าหรือน้อยกว่า ( D
อาจเป็นศูนย์หนึ่งหรือมากกว่าหนึ่งผู้สมัคร)
สังเกตว่าฉันบอกอย่างชัดเจนว่าพวกเขาสามารถเชื่อมต่อได้ทั้งสองทาง ในตัวอย่างถัดไปคุณสามารถดูกลยุทธ์ที่ใช้อีกครั้ง แต่คราวนี้ 4 เซลล์ไม่ได้เป็นรูปสี่เหลี่ยมผืนผ้า เซลล์ด้านซ้ายและด้านขวานั้นเชื่อมต่อกันเพราะมันอยู่ในกล่อง 3x3 เดียวกัน Y-Wing กล่าวว่าเราสามารถลบ1
ผู้สมัครในฐานะเซลล์ด้านบนซ้ายออกได้ เวลานี้ยังมีผู้สมัคร 2 คนในเซลล์นี้ที่เหลือดังนั้นเราจึงไม่พบหมายเลขที่ถูกต้องใหม่ แต่ถึงกระนั้นการกำจัดของ1
สามารถเปิดประตูไปสู่กลยุทธ์ที่แตกต่างกัน
หากท่านต้องการข้อมูลเพิ่มเติมเกี่ยวกับกลยุทธ์หรือต้องการตัวอย่างอีกไม่กี่เยี่ยมชมsudokuwiki.org
ข้อมูลจำเพาะของความท้าทาย
คุณจะได้รับ 4 รายการเป็นอินพุตซึ่งแสดงถึงตัวเลือกของเซลล์ สี่เซลล์เชื่อมต่อกันเป็นวงกลม (เซลล์ 1 เชื่อมต่อกับเซลล์ 2 ซึ่งเชื่อมต่อกับเซลล์ 3 ซึ่งเชื่อมต่อกับเซลล์ 4 ซึ่งเชื่อมต่อกับเซลล์ 1) คุณสามารถสมมติว่าแต่ละรายการเรียงลำดับจากน้อยไปมาก
งานของคุณคือการลบผู้สมัครหนึ่งคน (โดยใช้กลยุทธ์ Y-Wing) และส่งคืนรายการผู้สมัครที่ได้รับตามลำดับเดียวกัน หากคุณไม่สามารถใช้กลยุทธ์ได้ให้ส่งคืนรายการผู้สมัครที่เหมือนกัน
หากมีสองวิธีที่เป็นไปได้ (คุณสามารถลบ A ของเซลล์ B หรือลบ C ของเซลล์ D) ได้แทนที่จะส่งคืนเพียงโซลูชันเดียว มันไม่สำคัญหรอก
อินพุตสามารถอยู่ในรายการดั้งเดิมหรือรูปแบบอาร์เรย์ คุณสามารถใช้รายการของรายการหรือสิ่งที่คล้ายกัน คุณสามารถรับอินพุตผ่าน STDIN, อาร์กิวเมนต์บรรทัดคำสั่ง, พร้อมต์หรือฟังก์ชันอาร์กิวเมนต์และส่งคืนเอาต์พุตผ่านค่าส่งคืนหรือเพียงพิมพ์ไปที่ STDOUT
นี่คือรหัสกอล์ฟ รหัสที่สั้นที่สุด (เป็นไบต์) ชนะ
กรณีทดสอบ
[3 7] [6 7] [2 6] [3 6] => [3 7] [6 7] [2] [3 6] # Example 1
[6 7] [2 6] [3 6] [3 7] => [6 7] [2] [3 6] [3 7] # Example 1, different order
[2 6] [3 6] [3 7] [6 7] => [2] [3 6] [3 7] [6 7] # Example 1, different order
[3 6] [3 7] [6 7] [2 6] => [3 6] [3 7] [6 7] [2] # Example 1, different order
[1 2 8] [1 8] [8 9] [1 9] => [2 8] [1 8] [8 9] [1 9] # Example 2
[3 8] [4 8] [3 4 8] [3 4] => [3 8] [4 8] [3 8] [3 4]
[1 3 6 7 8] [3 8] [3 4] [4 8] => [1 3 6 7] [3 8] [3 4] [4 8]
[7 8] [7 8] [4 7] [4 8] => [7 8] [8] [4 7] [4 8] or [7] [7 8] [4 7] [4 8]
[4 7] [7 8] [4 8] [4] => [4 7] [7 8] [4 8] [] # Fictional example
[3 7] [2 6] [6 7] [3 6] => [3 7] [2 6] [6 7] [3 6] # Y-Wing can't be applied here
[4 7] [2 7 8] [4 8] [1 4] => [4 7] [2 7 8] [4 8] [1 4] # -||-
7 8
เป็นตัวเลือกสำหรับเซลล์แรกและเซลล์ที่สอง ยังสามารถใช้กลยุทธ์ Y-Wing ได้