Uwielbiamy nasze dziwne łamigłówki, nas Brytyjczyków

16

W kilku brytyjskich gazetach jest gra znana jako Hidato . Jest nieco podobny do Sudoku , chociaż zamiast mieć 1-9 w linii i bloku, chodzi o umieszczanie liczb w taki sposób, aby łączyły się w kolejności od 01najwyższej do najwyższej, aby wszystkie dotykały poziomo, ukośnie lub pionowo .

Wejścia będą zawierać wiele wierszy oddzielonych \n, zawierających bloki oddzielone spacją, którą można założyć o szerokości dwóch znaków. Każdy blok będzie liczbą, pustym miejscem do wypełnienia (oznaczonym przez --) lub ścianą, która nie może mieć cyfr w ( XX).

Twój wynik powinien być zgodny z podanym, aczkolwiek z pustymi blokami opatrzonymi liczbami. Pamiętaj, że może nie istnieć unikalne, a nawet istnienie rozwiązania - niektóre mogą dawać wielokrotność ze względu na ich dwuznaczność, podobnie jak Sudoku, a niektóre mogą być dosłownie nierozwiązywalne, w takim przypadku powinieneś dać falsey wynik , ale ty można założyć, że dane wejściowe są sformatowane jak poniżej.

Użyj standardowego nagłówka Language: XX bytes . Miłej gry w golfa!

Przykłady

Wejścia 01 XX 03, 01 -- 04, 01 --itp powinien wszystko coś powrót falsey .

Wejście:

01 -- --
-- XX 05

Wynik:

01 03 04
02 XX 05

Wejście:

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

Wynik:

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

Wejście:

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

Wynik:

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
źródło
Upewnij się, że rozumiem: mając siatkę z niektórymi komórkami, na których nie można chodzić, znajdź ścieżkę Hamiltona, która pasuje do wstępnie wypełnionych komórek?
Geobits
@AmiRuse Wow. To wygląda podstępnie. (Oczywiście pochodzi od osoby, która nienawidzi edycji zdjęć.) Miło jest poznać kogoś innego, kto ma logo VG. : O
kirbyfan64sos
Czy możemy znaleźć rozwiązanie dla tego przykładu? Przyda się również więcej przykładów.
Kade
Znakomity :). Możesz także poprosić o wyzwanie generatora później
Rozpad Beta
3
Czy metodę wprowadzania można uprościć? Może użyć tablicy liczb całkowitych 2D i mieć -1ścianę i 0być pustym? Ułatwi to skupienie się na prawdziwym wyzwaniu układanki, a wtedy nie będzie złożoności wypełniania liczb zerami lub ciągami parsowania.
mbomb007

Odpowiedzi:

1

JavaScript (Node.js) , 482 bajtów

Jest to rozwiązanie brutalnej siły, zaczyna się od 01i sprawdza każdą sąsiednią komórkę, sprawdzając puste komórki (-- ) lub żądaną liczbę i podążając ścieżką do ukończenia lub niemożliwości. Jeśli żądany numer istnieje i nie jest sąsiadem, to skraca to rozwiązanie. Największe pole zajmuje kilka sekund.

Prawdopodobnie nie jest to szczególnie interesujące, ale pomyślałem, że spróbuję swoich sił, by znaleźć rozwiązanie, zanim przejrzę odpowiedzi na temat kodu Rosetta i podobało mi się zmierzenie się z nieco trudniejszym wyzwaniem!

Znajduje wszystkie rozwiązania, gdy istnieje wiele . Treść jest funkcją, która akceptuje tablicę dwuwymiarową, a stopka przetwarza dane wejściowe do żądanego formatu i zwraca wynik również do żądanego formatu. Chętnie udzielę więcej informacji (i mniej golfa implementacji, jeśli jest zainteresowanie).

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}

Wypróbuj online!

Dom Hastings
źródło