Tuhaf bulmacalarımızı seviyoruz, İngilizler


16

Birkaç İngiliz gazetesinde Hidato olarak bilinen bir oyun var . Bir satır ve blokta 1-9 olmasına rağmen Sudoku'ya biraz benziyor , sayıları 01en üste kadar sırayla bağlanacak şekilde yerleştirmekle ilgili, bu yüzden hepsi yatay, çapraz veya dikey olarak dokunuyor .

Girdiler, \niki karakter genişliğinde olduğunu farz edebileceğiniz boşlukla ayrılmış bloklar içeren, birbirinden ayrılmış birden çok satır içerecektir . Her blok bir sayı, doldurulacak (ile gösterilen --) boş bir alan veya ( XX) içinde sayıları bulunmayan bir duvar olacaktır .

Çıktınız, sayılarla sağlanan boş bloklarla da olsa sağlananla eşleşmelidir. Bir çözümün benzersiz veya hatta varlığının olmayabileceğini unutmayın - bazıları Sudoku gibi, belirsizlikleri nedeniyle çoklu verim verebilir ve bazıları tam anlamıyla çözülmeyebilir, bu durumda bir falsey çıkışı vermelisiniz , ancak girişlerin aşağıdaki gibi biçimlendirildiğini varsayabiliriz.

Standart bir başlık kullanın Language: XX bytes. Mutlu golf!

Örnekler

Girdiler 01 XX 03, 01 -- 04, 01 --vb tüm iade şey olması gerektiği Falsey .

Giriş:

01 -- --
-- XX 05

Çıktı:

01 03 04
02 XX 05

Giriş:

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

Çıktı:

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

Giriş:

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

Çıktı:

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

Anladığımdan emin olun: Yürünemeyen bazı hücreler içeren bir ızgara verildiğinde, önceden doldurulmuş hücrelere uyan bir Hamilton yolu mu buldunuz?
Geobits

@AmiRuse Wow. Zor görünüyor. (Tabii ki, bu fotoğraf düzenlemeden nefret eden bir kişiden geliyor.) Burada logoları olarak VG karakteri olan başka birini tanımak güzel. : O
kirbyfan64sos

Örnek için bir çözüm görebilir miyiz? Daha fazla örnek de yardımcı olacaktır.
Kade

Parlak :). Daha sonra bir jeneratör mücadelesi de alabilirsiniz
Beta Çürüme

3
Giriş yöntemi basitleştirilebilir mi? 2B bir tamsayı dizisi kullanın ve -1bir duvar ve 0bir boş olabilir? Bu , bulmacanın gerçek meydan okumasına odaklanmayı kolaylaştıracak ve daha sonra sıfırlarla doldurma veya dizeleri ayrıştırma karmaşıklığı yoktur.
mbomb007

Yanıtlar:


1

JavaScript (Node.js) , 482 bayt

Bu bir kaba kuvvet çözümüdür, 01boş hücreleri ( --) veya istenen sayıyı kontrol eden ve tamamlanma veya imkansızlık yolunu izleyen komşu hücrelerin her birinde başlar ve kontrol eder . İstenen sayı varsa ve komşu değilse bu çözümü kısaltır. En büyük ızgara için birkaç saniye sürer.

Bu muhtemelen ilginç değil, ama Rosetta Kodu ile ilgili cevaplara bakmadan önce bir çözüm bulmaya çalışacağımı düşündüm ve biraz daha zor bir mücadeleyle uğraşmaktan zevk aldım!

Birçoğu olduğunda tüm çözümleri bulur . Gövde, iki boyutlu bir diziyi kabul eden bir işlevdir ve altbilgi, girdiyi istenen biçime işler ve sonucu da istenen biçime döndürür. Daha fazla bilgi vermekten mutluluk duyuyoruz (ve ilgi varsa daha az golf oynayan bir uygulama).

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}

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.