Een nonogram is een Japanse beeldpuzzel waarbij een verborgen afbeelding moet gevonden worden. Deze afbeelding kan gevormd worden door de vakjes van een rechthoekig rooster zwart of wit te kleuren, rekening houdend met de reeks natuurlijke getallen die voor elke rij en elke kolom van het rooster wordt opgegeven. Deze getallen geven aan hoeveel opeenvolgende zwarte vakjes er op die rij of kolom staan. Als de opgave bijvoorbeeld de getallenreeks 4 8 3 aangeeft, betekent dit dat de rij of kolom bestaat uit reeksen van vier, acht en drie opeenvolgende zwarte vakjes, in die volgorde, en dat er minstens één wit vakje staat tussen elk van deze opeenvolgende reeksen.

nonogram
Voorbeeld van een nonogrampuzzel terwijl die wordt opgelost. Hierbij werden sommige stappen tijdens het oplossen van de puzzel samengenomen.

Opgave

Voor deze opgave moet je een vereenvoudigde versie van de nonogrampuzzel oplossen. Zoals bij de originele puzzel worden voor elke rij de reeksen opeenvolgende zwarte vakjes opgegeven. De omschrijving voor de kolommen hebben we echter niet langer nodig. Elke reeks opeenvolgende zwarte vakjes wordt nu immers omschreven door een koppel natuurlijke getallen $$(s, l)$$, waarbij $$s$$ en $$l$$ respectievelijk de startpositie en de lengte van de reeks aangeven. Het meest linkse vakje van van een rij staat hierbij op positie nul.

vereenvoudigd nonogram
Oplossing van een vereenvoudigde versie van een nonogrampuzzel, waarbij voor elke reeks opeenvolgende zwarte vakjes zowel de startpositie als de lengte opgegeven worden.

Merk op dat de volgorde waarin de reeksen opeenvolgende zwarte vakjes worden opgegeven nu niet langer een rol speelt. Een rij van een nonogrampuzzel kan dus omschreven worden door een container (een lijst, tuple, verzameling, …) van tuples. Elk van deze tuples bestaat dan uit twee natuurlijke getallen die respectievelijk de startpositie en de lengte van de reeks opeenvolgende zwarte vakjes aangeven. Gevraagd wordt:

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand domoor.puzzel.txt1 zich in de huidige directory bevindt. Klik op de naam van het oplossingsbestand om de oplossing te bekijken die voor deze puzzel moet gegenereerd worden.

>>> breedte([(2, 12)])
14
>>> breedte(((1, 3), (7, 2), (12, 3)))
15
>>> breedte({(10, 5), (1, 2), (5, 3)})
15

>>> regel([(2, 12)])
'  ############'
>>> regel(((1, 3), (7, 2), (12, 3)), 20)
' ###   ##   ###     '
>>> regel({(10, 5), (1, 2), (5, 3)})
' ##  ###  #####'

>>> nonogram('domoor.puzzel.txt2', 'domoor.oplossing.txt3')