Un nonogramma è un puzzle logico bidimensionale che assomiglia a questo (schermate del gioco Pixelo , il mio gioco nonogramma preferito):
L'obiettivo del gioco è capire quale immagine codificano quei numeri. Le regole sono semplici: un numero su una colonna o riga significa che da qualche parte in quella colonna o riga, che molte caselle sono riempite in una riga. Ad esempio, la riga inferiore nell'immagine sopra non deve contenere caselle, mentre quella sopra deve avere tutte le caselle riempite. La terza fila dal basso ha 8 caselle piene e saranno tutte in fila.
Due o più numeri per la stessa colonna o riga indicano che ci sono più "esecuzioni" di caselle piene, con almeno uno spazio tra, con quelle lunghezze. L'ordine è conservato. Ad esempio, ci sono tre caselle riempite nella colonna a destra dell'immagine sopra, almeno uno spazio sotto di esse, e poi un'altra casella riempita.
Ecco lo stesso puzzle, quasi completato:
(Le X non sono importanti, sono solo un suggerimento che il giocatore lascia a se stesso per dire "Questo quadrato non è sicuramente riempito". Pensa alle bandiere in Minesweeper. Non hanno significato delle regole.)
Spero che tu possa vedere che, per esempio, le colonne centrali con suggerimenti che dicono "2 2" hanno due serie di 2 scatole piene.
La tua missione, se scegli di accettarlo, è quella di scrivere un programma o una funzione che creerà un puzzle come questo. Ti viene data la dimensione della tavola come un singolo intero (5 <= n <= 50) su stdin o come argomento (non c'è motivo per cui un puzzle nonogramma debba essere quadrato, ma per questa sfida sarà). Successivamente, ti verrà data una serie di 1 e 0 che rappresentano i quadrati pieni e non riempiti nell'immagine, rispettivamente. Le prime n sono la riga superiore, quindi la riga successiva, ecc. Verrà restituito o stampato per stdout una scheda di celle 2 * 1 (perché hanno un aspetto migliore e ti dà spazio per i suggerimenti di 2 cifre per una colonna ), tutti vuoti, con suggerimenti corrispondenti ai dati di input.
Formato di output
Campione
Ingresso:
./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])
Immagine:
Produzione:
1
2 1 2
3 2 1 2 3
+----------
3|
2 2|
1 1 1|
2 2|
3|
Ingresso:
./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'
Immagine:
Produzione:
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|
chiarimenti
- Il tuo output non deve necessariamente essere un puzzle risolvibile. Non tutti i nonogrammi sono risolvibili, ma non è questo il tuo problema. Basta emettere i suggerimenti che corrispondono all'input, che si tratti o meno di un buon puzzle.
- È consentito un programma che accetta argomenti sulla riga di comando. Questo è un po 'come detto sopra, ma è possibile avere un'idea sbagliata. Ecco a cosa servono i chiarimenti.
- La stampa
0
di una riga o colonna senza caselle compilate è obbligatoria. Non lo dico con parole da nessuna parte ma è nei dati di esempio.
5<=n<=50
è la specifica, quindi non possono esserci numeri a 3 cifre
-
di quanto dovrebbe?