ฉันจะสร้างตัวต่อ Sudoku ได้อย่างไร


17

ฉันกำลังพยายามสร้างตัวต่อปริศนา Sudoku มันยากกว่าที่ฉันคาดไว้มากและยิ่งฉันเข้าไปมากเท่าไหร่ก็ยิ่งได้รับมากเท่านั้น!

แนวทางปัจจุบันของฉันคือการแบ่งปัญหาออกเป็น 2 ขั้นตอน:

  1. สร้างตัวต่อ Sudoku (แก้) ตัวต่อที่สมบูรณ์
  2. ลบหมายเลขออกจนกว่าจะสามารถแก้ไขได้และมีวิธีแก้ปัญหาเพียง 1 ข้อ

ในขั้นตอนที่ 1 เนื่องจากฉันใช้วิธีการเดรัจฉานฉันกำลังเผชิญกับปัญหาเรื่องเวลาทำงาน มีวิธีที่ดีที่สุดในการเติมปริศนา Sudoku ที่สมบูรณ์หรือไม่?

ในขั้นตอนที่ 2 ฉันควรใช้อัลกอริทึมแบบใดในการ "ทำให้งงงวย" ซูโดกุที่แก้ไขแล้ว


คำถามนี้มีข้อมูลบางส่วนที่คุณสามารถแยกได้ในวิธีสร้างปริศนา
ratchet freak

3
คำถามนี้ถูกถามใน Puzzling (และมีคำตอบที่ดีกว่า): puzzling.stackexchange.com/questions/142/…
congusbongus

คำตอบ:


30

ฉันมีเกม Sudoku ที่ขายดีที่สุดใน iOS app store นี่คือวิธีที่ฉันสร้างปริศนา

ก่อนอื่นฉันมีแอปพลิเคชั่นตัวสร้างปริศนา แต่มันไม่ได้เป็นส่วนหนึ่งของรหัสของเกม มันเป็นแอพแบบสแตนด์อะโลนที่ฉันใช้ในการทำจิ๊กซอร์ มันได้รับการดัดแปลงอย่างมากดังนั้นฉันจึงสามารถตั้งให้สร้างรูปแบบที่แตกต่างการจัดอันดับความยากจำนวน givens ฯลฯ การสร้างตัวต่อและการรับระดับความยากที่สอดคล้องกันนั้นทำได้ยากและใช้เวลามากกว่าที่ผู้เล่นต้องการรอ ดังนั้นฉันจึงสร้างสิ่งที่ฉันเรียกว่า "ปริศนาไขปริศนา" และนั่นคือสิ่งที่ใช้ในรหัสของเกมเพื่อสร้างปริศนาที่ผู้คนเล่น

ฉันไม่ตอบวิธีเขียนรหัสเครื่องกำเนิดไฟฟ้าที่นี่ คุณสามารถ google และค้นหารหัสเครื่องกำเนิดไฟฟ้าปริศนาออนไลน์ได้ เริ่มที่นั่น แต่เพื่อให้เป็นเกมที่ดีคุณต้องสร้างเกมที่ดี เกมของฉันไม่ได้สร้างจิ๊กซอว์ได้ทันที

วิธีการทำงานของแอพตัวสร้างปริศนาของฉันคือมันสร้างปริศนาหลายพันชิ้นต่อนาที แต่มันไม่ได้ดีเลยและมันก็ไม่ตรงกับระดับความยากที่ระบุ เครื่องกำเนิดสร้างตัวต่อแล้วไขปริศนาและจัดอันดับความยากและให้คะแนนตัวต่อบนพื้นฐานของเทคนิคที่จำเป็นในการไขตัวต่อและพิจารณาว่าต้องเดาการแก้ปัญหา มันโยนปริศนาที่ไม่ตรงกับเกณฑ์ สำหรับปริศนาที่ยาก แต่เป็นไปไม่ได้บนเครื่องจักรที่เร็วมันอาจใช้เวลาหนึ่งชั่วโมงในการสร้าง 100 ปริศนาที่ตรงกับข้อกำหนดที่แน่นอนของฉัน นี่คือเหตุผลที่ฉันไม่ได้ทำในแอพ การสร้างตัวต่อได้อย่างรวดเร็วด้วยสเปคที่แข็งแกร่งเหล่านั้นจะไม่สามารถใช้งานได้กับคุณภาพของตัวต่อที่ฉันมีในแอพของฉัน

ปริศนาคือสตริงยาว 162 ตัวอักษร 81 ตัวอักษรที่มีตัวเลขและขีดกลางหรือจุดที่ช่องว่างจะเป็นแล้วอีก 81 ด้วยการแก้ปัญหา จากนั้นคอลัมน์สำหรับแต่ละสถิติเช่นจำนวนซิงเกิ้ล, ทวีคูณ, ฯลฯ

เอาต์พุตของฉันจากเซสชันการสร้างทั้งหมดเป็นเส้นคั่นด้วยเครื่องหมายจุลภาคพร้อมสถิติเป็นคอลัมน์ ฉันจะไขปริศนา 10,000 เรื่องนำพวกมันไปสู่ ​​Excel และจัดเรียงมันด้วยความยากลำบาก จากนั้นนำมาไว้ในแอพเพื่อดูพวกเขาบนกระดานเกม ฉันมองไปที่พวกเขาเพื่อดึงดูดสายตาและรูปแบบที่มองเห็นได้ของปริศนา จากนั้นฉันเลือกจากมือ

ฉันเรียกพวกเขาว่าปริศนาไขปริศนาและนี่คือสิ่งที่ฉันหมายถึง ตัวเลขในเกมซูโดกุเป็นเพียงสัญลักษณ์เท่านั้น แทนที่จะเป็นตัวเลข 1-9 พวกเขาอาจเป็นสีหรือสัญลักษณ์หรือตัวอักษร ดังนั้นตัวต่อเมล็ดพันธุ์ของฉันจึงไม่ใช่ตัวเลขพวกมันคือตัวอักษรไอ ปริศนาตัวต่อแต่ละตัวจะได้รับการเปลี่ยนแปลงทันทีเพื่อให้ไขปริศนาที่เล่นได้

  1. สุ่มตัวเลข / โทเค็น เมื่อฉันเปลี่ยนตัวอักษร ai กลับไปเป็นตัวเลข 1-9 ตารางการค้นหาจะถูกสุ่ม ความหมายที่ไม่ได้เป็นเสมอไป 1 เพียงอย่างเดียวสร้างประมาณ 300,000 รูปแบบในแต่ละปริศนา
  2. หมุนตัวต่อ 90, 180 หรือ 270 องศา ที่เพิ่ม 4 รูปแบบเพิ่มเติม
  3. ปัดปริศนาแนวนอนแนวตั้งหรือทั้งสองอย่าง ที่เพิ่ม 4 รูปแบบเพิ่มเติม

ปริศนาแต่ละเม็ดจึงสามารถสร้างรูปแบบ 5,806,080 รูปแบบ ฉันได้ทำการทดสอบในสนามกับผู้เล่นตัวจริง ผู้คนไม่รู้ว่าพวกเขากำลังเล่นตัวต่อแบบเดียวกัน มันเป็นไปไม่ได้จริง เฉพาะในกรณีที่พวกเขาสังเกตเห็นว่ารูปแบบที่ givens อยู่ในแต่ละครั้งเหมือนกัน แต่ด้วย 100 เมล็ดที่แตกต่างกันจะไม่มีใครสังเกตเห็น ผู้ใช้เกมของฉันนับล้านยังไม่ได้ ฉันยังทดสอบด้วยแอพตัวแก้ แอปแก้ปัญหาจะไม่แก้ปริศนาในลักษณะเดียวกันเมื่อมันหมุนหรือลอย บางครั้งมันจะวิเคราะห์ว่าเป็นการให้คะแนนความยากต่างกันถึงแม้ว่ามันจะเป็นปริศนาแบบเดียวกันก็ตาม

อย่างไรก็ตาม Big Bad Sudoku Book มีปริศนาตัวต่อ 10 ถึง 1,000 ใน 5 ระดับความยากและหลายรูปแบบตัวต่อ ซึ่งหมายความว่ามีเกมปริศนานับพันล้านรายการในเกมของฉัน ทุก 10,000 ปริศนามี 58,060,800,000 ปริศนาที่แตกต่างกัน

ใน Sudoku Book เวอร์ชั่น 4 (ครบกำหนดปี 2559) ฉันหาวิธีที่จะสามารถระบุปริศนาที่แน่นอนจาก 58 พันล้านดอลลาร์และได้รับตัวต่อเดียวกันบนอุปกรณ์ของผู้เล่นแต่ละคน


โพสต์ที่มีประโยชน์มาก คุณตรวจสอบว่าเมล็ดที่คุณสร้างสามารถสร้างจากเมล็ดอื่นได้หรือไม่ซึ่งหมายความว่าคุณมีเมล็ดเหมือนกันหรือไม่?
VLAS

ใช่. ฉันวางพวกเขาทั้งหมดใน textmate และเรียงลำดับ จากนั้นลบรายการที่ซ้ำกัน ฉันไม่คิดว่ามันจะลบอะไรเลย เมล็ดนั้นมีความพิเศษอย่างแน่นอน เป็นไปไม่ได้ที่จะไขปริศนาเดียวกันจากเมล็ดพืชสองเมล็ดที่แตกต่างกัน สักวันฉันจะแสดงกระบวนการที่แน่นอน แต่ไม่ใช่ตอนนี้เมื่อฉันยังคงทำกำไรวิธีการของฉัน :)
badweasel

จริงๆแล้วกระบวนการทั้งหมดของฉันอยู่ที่นี่ค่อนข้างมาก
badweasel

2
+1 สำหรับข้อมูลเชิงลึกที่ตัวเลขนั้นเป็นเพียงโทเค็นและวิธีที่คุณสามารถสร้างรูปแบบต่าง ๆ ก็แค่เปลี่ยนตัวเลขที่กำหนดให้กับตัวอักษร
S. Mitchell

คำตอบที่มีประโยชน์จริงๆ! เนื่องจากคุณมี 3 คอลัมน์และ 3 แถวคุณควรจะสามารถย้ายคอลัมน์กลางไปทางซ้ายหรือขวาและแถวกลางไปด้านบนหรือล่างเพื่อสร้างตัวแปรเพิ่มเติม 4 รายการ และแทนที่จะพลิกตัวเป็นปริศนาในแนวตั้งหรือลอยในแนวนอนคุณสามารถแลกเปลี่ยนคอลัมน์ซ้ายและขวา (และแถวบนและแถวล่าง) สำหรับตัวแปรอีก 4 ตัว ดังนั้นฉันคิดว่าคุณจะต้องได้รับ 43 ล้านการเปลี่ยนแปลงจากเมล็ดหนึ่ง
Roger_S

4

ในขั้นตอนที่ (1) สร้างตัวต่อ Sudoku ที่สมบูรณ์ (แก้ไข) เนื่องจากฉันใช้วิธีบังคับเดรัจฉานฉันกำลังเผชิญกับปัญหาเรื่องเวลาทำงาน มีวิธีที่ดีที่สุดในการเติมปริศนา Sudoku ที่สมบูรณ์หรือไม่?

มีวิธีง่ายๆในการกรอกปริศนาซูโดกุที่สมบูรณ์ - การเติมเป็นกลุ่มและการเปลี่ยนเป็นวงกลม

  1. กรอกข้อมูลในแถวแรกด้วยตัวเลขที่แตกต่างกันเก้าหมายเลข
  2. เติมแถวที่สองซึ่งเป็นการเลื่อนของบรรทัดแรกด้วยสามช่อง
  3. เติมแถวที่สามซึ่งเป็นการเลื่อนของบรรทัดที่สองด้วยสามช่อง
  4. เติมแถวที่สี่ซึ่งเป็นการเลื่อนของแถวที่สามทีละช่อง


line 1: 8 9 3  2 7 6  4 5 1
line 2: 2 7 6  4 5 1  8 9 3 (shift 3)
line 3: 4 5 1  8 9 3  2 7 6 (shift 3)

line 4: 5 1 8  9 3 2  7 6 4 (shift 1)
line 5: 9 3 2  7 6 4  5 1 8 (shift 3)
line 6: 7 6 4  5 1 8  9 3 2 (shift 3)

line 7: 6 4 5  1 8 9  3 2 7 (shift 1)
line 8: 1 8 9  3 2 7  6 4 5 (shift 3)
line 9: 3 2 7  6 4 5  1 8 9 (shift 3)

เพื่อป้องกันไม่ให้ผู้ใช้สังเกตเห็นรูปแบบที่ชัดเจนมันอาจเป็นความคิดที่ดีที่จะสุ่มลำดับของแถวและคอลัมน์เพื่อไม่ให้มีรูปแบบใด ๆ อีกต่อไป ตราบใดที่หมายเลข 9 ทั้งหมดในแต่ละแถว / คอลัมน์ย้ายกันเป็นหนึ่งหน่วยอะตอมบอร์ด Sudoku จะยังคงใช้ได้เสมอ

คุณจะได้รับปริศนาซูโดกุที่สมบูรณ์ สำหรับรายละเอียดเพิ่มเติมคุณสามารถค้นหา "ทำ Sudoku"


3

มันไม่ยากเกินไปหากว่าคุณมีนักแก้ปัญหาซูโดกุ

การทำซูโดกุเป็นเรื่องยาก / น่าสนใจดังนั้นควรเก็บไว้เป็นคำถามอื่น หรือคุณก็สามารถอ่านนี้และดูว่าคุณจะไป

  1. ในการสร้างตัวไขปริศนาให้เรียกใช้ตัวแก้ปัญหาบนกระดานเปล่า ข้อแม้เดียวคือคุณควรสุ่ม "เดา" ที่นักแก้ปัญหาใช้มิฉะนั้นคุณอาจท้ายด้วยตัวต่อเดิมทุกครั้ง นั่นคือในบางจุดตัวแก้จะลองตัวเลขสำหรับเซลล์ มันอาจลองตามลำดับนี้1, 2, 3, 4, ...และเลือกอันแรกที่ใช้ได้ 4, 7, 2, 9, ...คุณจำเป็นต้องสับเปลี่ยนลำดับที่เพื่อที่จะพยายามพูด กระบวนการนี้ควรเร็วเท่ากับตัวแก้ปัญหาของคุณ
  2. ในการลบตัวเลขให้ใช้อัลกอริทึมนี้:
    • เลือกหมายเลขสุ่มที่คุณไม่เคยลองลบมาก่อน
    • ลบหมายเลขเรียกใช้ตัวแก้ไขของคุณด้วยเงื่อนไขเพิ่มเติมที่ไม่สามารถใช้หมายเลขที่ลบออกได้ที่นี่
    • หากผู้แก้ปัญหาพบวิธีแก้ปัญหาคุณจะไม่สามารถลบหมายเลขได้
    • ทำซ้ำจนกว่าคุณจะลบตัวเลขออกมากพอ (หรือคุณไม่สามารถลบออกได้อีก)

นี่เป็นวิธีที่ง่ายมาก (และไร้เดียงสา) ดังนั้นจึงไม่มีการรับประกันว่าคุณจะได้รับปริศนาของความยากลำบาก - นอกเหนือจากจำนวนตัวเลขที่หายไปนั่นคือ - หรือถ้าคุณสามารถลบจำนวนตัวเลขที่คุณต้องการ หวังว่านี่จะช่วยได้อยู่ดี


ตรวจสอบให้แน่ใจว่าผู้แก้ปัญหาไม่สามารถหาวิธีแก้ไขปัญหาหลายวิธีจากสถานะเดียวกัน โดยปกติควรมีทางออกเดียวเท่านั้น นอกจากนี้คุณสามารถตรวจสอบขั้นตอนเชิงตรรกะที่นักแก้ปัญหาจำเป็นต้องใช้เพื่อค้นหาวิธีแก้ปัญหาเพื่อระบุความยากลำบากเช่นจำเป็นต้องใช้กลยุทธ์ x-wing หรือ ... ?
OriginalDaemon

1
@OriginalDaemon เกี่ยวกับจุดแรกของคุณมันครอบคลุมในจุดจุดที่สาม: หากการลบหมายเลขนั้นเป็นผลลัพธ์ในโซลูชันที่สองให้ย้อนกลับไป
congusbongus

0

ฉันคิดว่ามันน่าสนใจที่จะชี้ให้เห็นหน้าเว็บนี้เพราะมันช่วยฉันได้มากในการพัฒนาความสามารถของเรา การทำซูโดกุด้วยโซลูชั่นที่ไม่เหมือนใครอยู่ห่างไกลจากงานง่าย ๆ ในลิงค์คุณสามารถค้นหาว่าผู้เขียน (เขาทำผลงานได้ยอดเยี่ยมจริงๆไม่ใช่ฉันใช่มั้ย!) พบกลยุทธ์ที่แตกต่างกันหลายประการ คุณสามารถมีความคิดในการสร้างตัวแก้ Sudoku ของคุณเอง

ตอนนี้ไปกับหัวข้อยังมีวิธีการสร้างซูโดกุที่คล้ายกันเพียงแค่โดย

  1. การเรียงสับเปลี่ยนของแถว
  2. วิธีแก้ปัญหาอื่น ๆ ที่ง่าย ๆ คือเริ่มต้นด้วยการเติมซูโดกุของ minimun 17 หลักให้เต็ม (เป็นการพิสูจน์ขั้นต่ำเพื่อหาทางออกที่ไม่เหมือนใคร) และเติมกลวิธีที่แตกต่างกันดังต่อไปนี้ (เช่นในลิงค์ก่อนหน้านี้ สามารถทำสิ่งที่คล้ายกัน) จนกว่าคุณจะถึงทางออกที่ไม่ซ้ำกัน
  3. มีรายการของนักคณิตศาสตร์ที่พยายามค้นหาซูโดกุทางออกที่ไม่ซ้ำกันจำนวน 16 ตัวโดยมีรายชื่อ HUUDEEEEE จำนวน 17 หลักซูโดกุ ฉันจำไม่ได้ว่าเขามีสำเนาของการเขียนแบบใด แต่ฉันค่อนข้างแน่ใจว่าถ้าคุณสามารถเสนอซูโดกุ 17 โซลูชั่นที่ไม่เหมือนใครให้เขาจะดีใจมากกว่าที่จะให้คุณใช้ข้อมูลของเขา

ไชโยและขอให้โชคดีกับอัลกอริทึม: D


อืมการเชื่อมโยงนี้ใช้สำหรับนักแก้ปัญหาซูโดกุไม่ใช่ผู้สร้าง
greenoldman

@ greenreenman ใช่มันเป็นทางออก ฉันคิดว่ามันน่าสนใจสำหรับผู้ใช้เนื่องจากเขาเป็นวิธีการปัจจุบันในการลบตัวเลขและแก้ไข ลิงก์นี้ให้กลยุทธ์ในการแก้ปัญหาได้เร็วขึ้นเขาเข้าร่วมงานกับซูโดกุ
David Sánchez

0

ตัวแก้ปัญหาของฉันใช้กำลังดุร้ายและสามารถหาคำตอบได้ภายใน 20 มิลลิวินาที โดยใช้วิธีการลบตามที่อธิบายไว้ข้างต้นเครื่องกำเนิดของฉันจะสร้างตัวต่อได้ภายใน 200 มิลลิวินาที

มันมักจะสร้างตัวต่อที่เหลืออยู่ประมาณ 24-34 หลักและฉันก็ยังไม่รู้ว่าพวกมันจะสร้างตัวต่อ 17 ตัวได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.