เรารักปริศนาประหลาดของเราพวกเราชาวอังกฤษ


16

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

อินพุตจะมีหลายบรรทัดคั่นด้วย\nบล็อกที่คั่นด้วยช่องว่างซึ่งคุณสามารถสมมติว่ามีความกว้างสองอักขระ แต่ละบล็อกจะเป็นตัวเลขพื้นที่ว่างที่จะเติม (ระบุโดย--) หรือผนังที่ไม่สามารถมีตัวเลขใน ( XX)

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

Language: XX bytesใช้ส่วนหัวมาตรฐาน มีความสุขในการเล่นกอล์ฟ!

ตัวอย่าง

ปัจจัยการผลิต01 XX 03, 01 -- 04, 01 --ฯลฯ ควรทั้งหมดผลตอบแทนบางสิ่งบางอย่างfalsey

การป้อนข้อมูล:

01 -- --
-- XX 05

เอาท์พุท:

01 03 04
02 XX 05

การป้อนข้อมูล:

-- 33 35 -- -- XX XX XX    
-- -- 24 22 -- XX XX XX      
-- -- -- 21 -- -- XX XX
-- 26 -- 13 40 11 XX XX
27 -- -- -- 09 -- 01 XX
XX XX -- -- 18 -- -- XX
XX XX XX XX -- 07 -- --
XX XX XX XX XX XX 05 --

เอาท์พุท:

32 33 35 36 37 XX XX XX
31 34 24 22 38 XX XX XX
30 25 23 21 12 39 XX XX
29 26 20 13 40 11 XX XX
27 28 14 19 09 10 01 XX
XX XX 15 16 18 08 02 XX
XX XX XX XX 17 07 06 03
XX XX XX XX XX XX 05 04

การป้อนข้อมูล:

XX XX XX XX -- 53 XX XX XX XX
XX XX XX XX -- -- XX XX XX XX
XX XX 56 -- -- -- 30 -- XX XX
XX XX -- -- -- -- -- -- XX XX
XX -- -- 20 22 -- -- -- -- XX
XX 13 -- 23 47 -- 41 -- 34 XX
-- -- 11 18 -- -- -- 42 35 37
-- -- -- -- 05 03 01 -- -- --
XX XX XX XX -- -- XX XX XX XX
XX XX XX XX 07 -- XX XX XX XX

เอาท์พุท:

XX XX XX XX 52 53 XX XX XX XX
XX XX XX XX 54 51 XX XX XX XX
XX XX 56 55 28 50 30 31 XX XX
XX XX 26 27 21 29 49 32 XX XX
XX 25 24 20 22 48 45 44 33 XX
XX 13 19 23 47 46 41 43 34 XX
14 12 11 18 04 02 40 42 35 37
15 16 17 10 05 03 01 39 38 36
XX XX XX XX 09 06 XX XX XX XX
XX XX XX XX 07 08 XX XX XX XX

ทำให้แน่ใจว่าฉันเข้าใจ: กำหนดตารางที่มีเซลล์ที่ไม่สามารถเดินได้บางส่วนให้หาเส้นทาง Hamiltonian ที่เหมาะกับเซลล์ที่เติมไว้ล่วงหน้าหรือไม่
Geobits

@AmiRuse ว้าว นั่นดูยุ่งยาก (แน่นอนว่ามันมาจากคนที่เกลียดการแก้ไขภาพ) มันเป็นเรื่องดีที่ได้รู้จักกับคนอื่นที่นี่ซึ่งมีตัวอักษร VG เป็นโลโก้ของพวกเขา : O
kirbyfan64sos

เราสามารถดูวิธีแก้ปัญหาสำหรับตัวอย่างได้หรือไม่? ตัวอย่างเพิ่มเติมจะเป็นประโยชน์เช่นกัน
Kade

ยอดเยี่ยม :) นอกจากนี้คุณยังสามารถสร้างความท้าทายให้กับเครื่องกำเนิดไฟฟ้าได้ในภายหลัง
Beta Decay

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

คำตอบ:


1

JavaScript (Node.js) , 482 ไบต์

นี่เป็นวิธีการแก้ปัญหาแบบ brute-force มันเริ่มต้นที่01และตรวจสอบทุกเซลล์ที่อยู่ใกล้เคียงเพื่อตรวจสอบเซลล์ว่างเปล่า ( --) หรือจำนวนที่ต้องการและทำตามเส้นทางเพื่อไปสู่ความสมบูรณ์ หากจำนวนที่ต้องการมีอยู่และไม่ใช่เพื่อนบ้านก็เป็นทางลัดในการแก้ไขปัญหานี้ ใช้เวลาสองสามวินาทีสำหรับกริดที่ใหญ่ที่สุด

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

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

f=a=>{F=(D,n,j)=>[Z=[].concat(...D),z=Z.indexOf(j),z>-1&&[x=z%w,y=z/w|0],z>-1&&[[x-1,y-1],[x,y-1],[x+1,y-1],[x-1,y],[x+1,y],[x-1,y+1],[x,y+1],[x+1,y+1]]][n];C=q=>q.map(Q=>Q.slice());w=a[0][L='length'];l=F(a,0).filter(c=>c!='XX')[L];R=[];r=(s,d)=>{let n=`0${+s+1}`.slice(-2);N=F(d,2,n);n>l?R.push(C(d)):~F(d,1,s)?(p=F(d,3,s),p.filter(P=>P==N+'')[L]?r(n,C(d)):!~F(d,1,n)?p.map(I=>{[x,y]=I,(x<0||x>w-1||y<0||y>d[L]-1)||d[y][x]=='--'&&(D=C(d),r(D[y][x]=n,D))}):0):0};r('01',a);return R}

ลองออนไลน์!

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