Ein Nonogramm ist ein zweidimensionales Logik-Puzzle, das ungefähr so aussieht (Screenshots aus dem Spiel Pixelo , meinem Lieblings-Nonogramm-Spiel):

Das Ziel des Spiels ist es herauszufinden, welches Bild diese Zahlen codieren. Die Regeln sind einfach: Eine Zahl in einer Spalte oder Zeile bedeutet, dass irgendwo in dieser Spalte oder Zeile viele Felder in einer Zeile ausgefüllt sind. Beispielsweise darf in der unteren Zeile des obigen Bildes kein Kästchen ausgefüllt sein, während in der oberen Zeile alle Kästchen ausgefüllt sein müssen. Die dritte Reihe von unten hat 8 gefüllte Kisten, und sie werden alle in einer Reihe sein.
Zwei oder mehr Zahlen für dieselbe Spalte oder Zeile bedeuten, dass mehrere "Durchläufe" von gefüllten Feldern mit mindestens einem Leerzeichen dazwischen mit diesen Längen vorhanden sind. Die Reihenfolge bleibt erhalten. Beispielsweise befinden sich drei ausgefüllte Kästchen in der rechten Spalte des obigen Bildes, mindestens ein Leerzeichen darunter, und ein weiteres ausgefülltes Kästchen.
Hier ist dasselbe Puzzle, fast fertig:

(Die Xs sind nicht wichtig, sie sind nur ein Hinweis, den der Spieler für sich selbst hinterlässt, um zu sagen, "Dieses Feld ist definitiv nicht ausgefüllt". Denken Sie an Flags in Minesweeper. Sie haben keine Regelbedeutung.)
Hoffentlich können Sie sehen, dass beispielsweise die mittleren Spalten mit Hinweisen, die "2 2" sagen, zwei Reihen von ausgefüllten Feldern mit zwei Längen aufweisen.
Ihre Mission ist es, ein Programm oder eine Funktion zu schreiben, mit der Sie ein solches Puzzle erstellen können. Sie erhalten die Größe der Tafel als einzelne Ganzzahl (5 <= n <= 50) auf stdin oder als Argument (es gibt keinen Grund, warum ein Nonogramm-Puzzle quadratisch sein muss, aber für diese Herausforderung wird es sein). Danach erhalten Sie eine Reihe von Einsen und Nullen, die jeweils gefüllte und ungefüllte Quadrate im Bild darstellen. Die ersten n von ihnen sind die oberste Reihe, dann die nächste Reihe usw. Sie kehren zurück oder drucken auf eine Tafel mit 2 * 1-Zellen (weil sie besser aussehen und Sie Platz für zweistellige Hinweise für eine Spalte haben) ), alle leer, mit Hinweisen, die den Eingabedaten entsprechen.
Ausgabeformat

Probe
Eingang:
./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])
Bild:

Ausgabe:
1
2 1 2
3 2 1 2 3
+----------
3|
2 2|
1 1 1|
2 2|
3|
Eingang:
./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'
Bild:

Ausgabe:
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|
Klarstellungen
- Ihre Ausgabe muss kein lösbares Rätsel sein. Nicht alle Nonogramme sind lösbar, aber das geht Sie nichts an. Gib einfach die Hinweise aus, die der Eingabe entsprechen, ob sie ein gutes Puzzle ergeben oder nicht.
- Ein Programm, das Argumente in der Befehlszeile akzeptiert, ist zulässig. Dies ist eine Art oben angegeben, aber es ist möglich, die falsche Idee zu bekommen. Dafür gibt es Klarstellungen.
- Das Drucken von a
0für eine Zeile oder Spalte, in der keine Felder ausgefüllt sind, ist obligatorisch. Ich sage das nirgendwo mit Worten, aber es ist in den Beispieldaten.
5<=n<=50ist die Spezifikation, daher kann es keine 3-stelligen Zahlen geben
-als sie sollte?