Nonogram to dwuwymiarowy łamigłówka logiczna, która wygląda mniej więcej tak (zrzuty ekranu z gry Pixelo , moja ulubiona gra Nonogram):
Celem gry jest ustalenie, jaki obraz kodują te liczby. Reguły są proste: Liczba w kolumnie lub wierszu oznacza, że gdzieś w tej kolumnie lub wierszu wiele pól jest wypełnionych w jednym rzędzie. Na przykład w dolnym rzędzie na powyższym obrazku nie może być wypełnionych żadnych pól, podczas gdy w powyższym rzędzie muszą być wypełnione wszystkie jego pola. Trzeci rząd od dołu ma 8 wypełnionych pól i wszystkie będą w jednym rzędzie.
Dwie lub więcej liczb dla tej samej kolumny lub wiersza oznacza, że istnieje wiele „serii” wypełnionych pól, z co najmniej jedną spacją między nimi, o tych długościach. Kolejność zostaje zachowana. Na przykład są trzy wypełnione pola w prawej kolumnie powyższego obrazu, co najmniej jedno miejsce pod nimi, a następnie jeszcze jedno wypełnione pole.
Oto ta sama zagadka, prawie ukończona:
(X nie są ważne, to tylko wskazówka, którą gracz pozostawia, aby powiedzieć „Ten kwadrat zdecydowanie nie jest wypełniony”. Pomyśl flagi w Saper. Nie mają one żadnych zasad.)
Mam nadzieję, że widać na przykład, że środkowe kolumny z podpowiedziami „2 2” mają dwa ciągi o długości 2 wypełnionych pól.
Twoim zadaniem, jeśli zdecydujesz się to zaakceptować, jest napisanie programu lub funkcji, która stworzy taką układankę. Rozmiar tablicy jest podawany jako pojedyncza liczba całkowita (5 <= n <= 50) na stdin lub jako argument (nie ma powodu, dla którego łamigłówka nonogramowa musi być kwadratowa, ale dla tego wyzwania będzie). Następnie otrzymasz serię 1 i 0 reprezentujących odpowiednio wypełnione i niewypełnione kwadraty na obrazie. Pierwszy n z nich to górny rząd, a następnie następny rząd itp. Zwrócisz lub wydrukujesz, aby ustawić tablicę 2 * 1 komórek (ponieważ wyglądają lepiej i daje ci miejsce na 2-cyfrowe wskazówki dla kolumny ), wszystkie są puste, z podpowiedziami odpowiadającymi danym wejściowym.
Format wyjściowy
Próba
Wkład:
./nonogram <<< '5 0 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 1 0'
OR
n(5,[0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0])
Obraz:
Wydajność:
1
2 1 2
3 2 1 2 3
+----------
3|
2 2|
1 1 1|
2 2|
3|
Wkład:
./nonogram <<< '15 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1'
Obraz:
Wydajność:
1 1
1 1 3 3 5 5 3 3 1
7 2 3 2 4 2 3 210 2 3 0 4 215
+------------------------------
2|
1|
1|
1|
1|
1 1|
3 3 1 1|
1 5 1 1|
3 5 3|
1 5 1|
1 3 1|
1 1 1 1 1|
1 1 1 1 1 1 1 1|
11 3|
11 3|
Wyjaśnienia
- Twój wynik nie musi być układanką do rozwiązania. Nie wszystkie nonogramy są rozwiązywalne, ale to nie jest twój problem. Po prostu wypisz podpowiedzi, które odpowiadają danym wejściowym, niezależnie od tego, czy stanowią dobrą łamigłówkę, czy nie.
- Program, który pobiera argumenty z wiersza poleceń, jest dozwolony. Jest to w pewnym sensie wspomniane powyżej, ale możliwe jest, aby uzyskać zły pomysł. Po to są wyjaśnienia.
- Drukowanie
0
wiersza lub kolumny bez wypełnionych pól jest obowiązkowe. Nigdzie nie mówię tego słowami, ale jest to w przykładowych danych.
5<=n<=50
jest specyfikacją, więc nie może być żadnych 3-cyfrowych liczb-
niż powinien?Odpowiedzi:
GolfScript, 128 znaków
Dane wejściowe należy podać na STDIN jako liczby oddzielone spacjami.
Możesz przetestować przykład tutaj .
Skomentowany kod:
źródło
~](:k/.zip\]{{1,%{,}%.!,+}%}/{' ':^*}%{.{,}%$-1=}:f~:r{^*\+r~)>'|'n}+%\f{.~)\[^]*@+>{^\+-2>}%}+%zip{r)^*\n}%r^*'+''--'k*n](
zagrać w golfa na 123 znaki: (z jakiegoś powodu lettercount.com mówi 125 znaków, jeśli je skopiujesz, ale zapewniam cię, że to 123 znaki). Niektóre części algorytmu zostały zmienione, ale większość jest nadal taka sama. Zmieniłem także niektóre nazwy zmiennych (9 jako zmienna jest inteligentna, ale także mylące), ale możesz je zmienić, jeśli chcesz.Ruby, 216
255Chociaż nie daje to dokładnej próbki wyjściowej podanej w pytaniu, jest zgodne ze specyfikacjami. Jedyna różnica w przykładach polega na tym, że drukuję kilka wiodących spacji / nowych linii.
Przykład:
Dziennik zmian:
chunk
namap
.[nil]
zamiast dzwonićArray#compact
.źródło
length(leading spaces + numbers to the left) == 2*n
iheight(leading newlines + numbers at the top) == n
... tak długo, jak twój monitor jest wystarczająco duży dla3*n+1 × 2*n+2
znaków, nie powinieneś dyskwalifikować mnie. :)Ruby, 434
źródło
ruby $yourprogram <<< $input
ale dostałemruby_nanograms:7:in '<main>': undefined method '+' for nil:NilClass (NoMethodError)
.ruby nonogram.rb 2 1 0 0 1
na 2x20
dla czwartej kolumny w drugim przykładzie.+------
linia ... jest wcięta również o jeden zbyt wiele spacji.GolfScript
149147Kod
Edycje:
puts
do zapisania jeszcze jednego znakuDema online
Nieco adnotowana wersja kodu
źródło
JavaScript (E6) 314
334 357 410Bez golfa
Stosowanie
N(5,[0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0])
N(15,[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1])
Edytuj historię
1 Usunięto wyrażenie regularne używane do znajdowania kolumn. Przeciążenie
2 Prostsze jest lepsze. Dane wyjściowe do ciągu, a nie do tablicy. Usunięto funkcję pomocnika FILL (F)
3 Jeszcze łatwiej. Nie mogę nic lepszego niż to. Nadal nie można porównać do Golfscript :(
źródło
R, 384 znaki
Z wcięciami i niektórymi objaśnieniami:
Stosowanie:
źródło
C - 511
C zdecydowanie nie został stworzony do ładnego formatowania danych wyjściowych. Liczba znaków obejmuje tylko niezbędne spacje / nowe linie.
Dane wejściowe pochodzą ze STDIN, liczby oddzielone spacjami.
źródło
Minęło kilka dni i nikt nie odpowiedział w pythonie, więc oto moja (prawdopodobnie dość kiepska) próba:
Python 2.7 -
404397380 bajtówWkrótce opublikuję wersję bez golfa, ale w tej chwili uważam, że jest dość czytelna. :)EDYCJA: Pisząc wersję bez golfa zauważyłem kilka ulepszeń, które mogłem uczynić, by były dość znaczące! Z jakiegoś powodu, którego nie potrafię wyjaśnić, ma teraz dodatkowe znaki nowej linii na górze i spacje po lewej stronie (chociaż nie sądzę, żebym zmienił cokolwiek funkcjonalnego), ale nadal spełnia specyfikację.
Nadchodzi wersja bez golfa!Nie golfowany:
Wprowadzono kilka zmian ze względu na czytelność (
g
podział na trzy nazwane funkcje, złożone zestawienia list wfor
pętle), ale logicznie działa dokładnie tak samo.Dlatego mylące jest to, że ten nie drukuje dodatkowych spacji i znaków nowej linii, podczas gdy ten gra w golfa. ¯ \ _ (ツ) _ / ¯
źródło