Kami suka teka-teki aneh kami, kami orang Inggris

16

Di beberapa surat kabar Inggris ada permainan yang dikenal sebagai Hidato . Ini agak mirip dengan Sudoku , meskipun bukannya memiliki 1-9 dalam garis dan blok, ini tentang menempatkan angka sedemikian rupa sehingga mereka terhubung secara berurutan dari 01yang paling tinggi, sehingga mereka semua menyentuh secara horizontal, diagonal atau vertikal. .

Input akan berisi beberapa baris yang dipisahkan oleh \n, berisi blok yang dipisahkan oleh spasi, yang dapat Anda anggap lebar dua karakter. Setiap blok akan berupa angka, ruang kosong untuk diisi (ditunjukkan oleh --), atau dinding yang tidak dapat memiliki angka dalam ( XX).

Output Anda harus cocok dengan yang disediakan meskipun dengan blok kosong yang disediakan dengan angka. Perhatikan bahwa mungkin tidak ada yang unik, atau bahkan keberadaan, solusi - beberapa dapat menghasilkan beberapa karena ambiguitas mereka, seperti Sudoku, dan beberapa mungkin benar-benar tidak terpecahkan, dalam hal ini Anda harus memberikan output palsu , tetapi Anda dapat berasumsi input diformat seperti di bawah ini.

Gunakan tajuk standar Language: XX bytes. Selamat bermain golf!

Contohnya

Input 01 XX 03, 01 -- 04, 01 --, dll semua harus kembali sesuatu falsey .

Memasukkan:

01 -- --
-- XX 05

Keluaran:

01 03 04
02 XX 05

Memasukkan:

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

Keluaran:

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

Memasukkan:

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

Keluaran:

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
Mia yun Ruse
sumber
Memastikan saya mengerti: Diberi kisi-kisi dengan beberapa sel non-walkable, temukan jalur Hamiltonian yang cocok dengan sel-sel prefilled?
Geobits
@AmiRuse Wow. Itu terlihat rumit. (Tentu saja, ini berasal dari orang yang membenci penyuntingan foto.) Senang mengetahui orang lain di sini yang memiliki karakter VG sebagai logo mereka. : O
kirbyfan64sos
Bisakah kita melihat solusi untuk contohnya? Lebih banyak contoh akan membantu juga.
Kade
Cemerlang :). Anda juga dapat memiliki tantangan generator nanti
Beta Decay
3
Bisakah metode input disederhanakan? Mungkin menggunakan 2D array integer, dan telah -1menjadi tembok, dan0 menjadi kosong? Itu akan membuatnya lebih mudah untuk fokus pada tantangan sebenarnya dari teka-teki, dan kemudian tidak ada kompleksitas nomor padding dengan nol atau string parsing.
mbomb007

Jawaban:

1

JavaScript (Node.js) , 482 byte

Ini adalah solusi brute-force, itu dimulai pada 01dan memeriksa setiap sel tetangga memeriksa sel kosong ( --) atau nomor yang diinginkan dan mengikuti jalan menuju penyelesaian atau ketidakmungkinan. Jika nomor yang diinginkan ada dan bukan tetangga, pintas solusi ini. Butuh beberapa detik untuk grid terbesar.

Ini mungkin tidak terlalu menarik, tetapi saya pikir saya akan mencoba membuat solusi sebelum melihat jawaban yang terkait pada Rosetta Code dan saya menikmati menangani tantangan yang sedikit lebih sulit!

Temukan semua solusi saat ada banyak . Tubuh adalah fungsi yang menerima array dua dimensi dan footer memproses input ke format yang diinginkan, dan mengembalikan hasilnya ke format yang diinginkan juga. Senang memberikan lebih banyak informasi (dan implementasi yang kurang golf jika ada minat).

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}

Cobalah online!

Dom Hastings
sumber