Bij het uitlezen van deze digitale zevensegmentendisplays zijn de cijfers op de vijfde rij weggevallen. Kan je bepalen welke cijfers daar moeten staan?

uitlezingen
Bij het uitlezen van deze digitale zevensegmentendisplays zijn de cijfers op de vijfde rij weggevallen. Kan je bepalen welke cijfers daar moeten staan?

Het zijn dezelfde cijfers als die op de eerste rij. We hebben de segmenten van de cijfers op de bovenste twee rijen ingekleurd, zodat je gemakkelijker kan zien dat de cijfers op een rij aangeven hoeveel segmenten van elk type (kleur) voorkomen in de vorige rij. Dit is ook de enige cyclus die na vier stappen terug in herhaling valt.

uitlezingen
De cijfers op de onderste rij zijn dezelfde als die op de bovenste rij. De segmenten van de cijfers op de bovenste twee rijen zijn ingekleurd, om te illustreren dat de cijfers op een rij aangeven hoeveel segmenten van elk type (kleur) voorkomen in de vorige rij. Dit is ook de enige cyclus die na vier stappen terug in herhaling valt.

Opgave

Zoals de naam al doet vermoeden, bestaat een zevensegmentendisplay uit zeven segmenten. Als de zeven segmenten allemaal aan staan, dan vormen ze het cijfer 8. We nummeren de segmenten vanaf nul in de gebruikelijke leesvolgorde: van links naar rechts en van boven naar onder.

segmenten
Nummering van de zeven segmenten van een zevensegmentendisplay.

Door bepaalde segmenten gericht aan of uit te zetten, kunnen we op de volgende manier de tien decimale cijfers van een zevensegmentendisplay uitlezen.

cijfers
Voorstelling van de tien cijfers op een zevensegmentendisplay.

Hierbij worden de segmenten die aan staan in het rood weergegeven. Merk op dat het cijfer 1 weergegeven wordt door enkel de twee segmenten aan de linkerkant aan te zetten, en niet de twee segmenten aan de rechterkant. Dit is een detail dat wel degelijk belangrijk is met  het oog op wat volgt.

De weergave van een cijfer op een zevensegmentendisplay wordt voorgesteld als een verzameling (set) met de nummers (int) van de segmenten die aan staan op het display. Zo wordt de weergave van cijfer 3 bijvoorbeeld voorgesteld als de verzameling $$\{0, 2, 3, 5, 6\}$$. Voor de tien decimale cijfers zijn dit de segmenten die aan staan op een zevensegmentendisplay:

cijfer segmenten
0 0, 1, 2, 4, 5, 6
1 1, 4
2 0, 2, 3, 4, 6
3 0, 2, 3, 5, 6
4 1, 2, 3, 5
5 0, 1, 3, 5, 6
6 0, 1, 3, 4, 5, 6
7 0, 2, 5
8 0, 1, 2, 3, 4, 5, 6
9 0, 1, 2, 3, 5, 6

Een uitlezing $$u = u_0u_1u_2u_3u_4u_5u_6$$ van zeven cijfers op zeven zevensegmentendisplays wordt voorgesteld als een string (str) met de zeven cijfers. Voor elke uitlezing $$u$$ kunnen we een volgende uitlezing $$v = v_0v_1v_2v_3v_4v_5v_6$$ bepalen, waarbij $$v_i$$ ($$i = 0, \ldots, 6$$) aangeeft hoeveel keer segment $$i$$ aan staat in de weergave van de cijfers van uitlezing $$u$$.

Gevraagd wordt:

Voorbeeld

>>> cijfer2segmenten(3)
{0, 2, 3, 5, 6}
>>> cijfer2segmenten('A')
Traceback (most recent call last):
AssertionError: ongeldig cijfer

>>> segmenten2cijfer({0, 5, 2, 6, 3})
3
>>> segmenten2cijfer([2, 3, 5])
Traceback (most recent call last):
AssertionError: ongeldige segmenten

>>> volgende_uitlezing('4635263')
'6447366'
>>> volgende_uitlezing('6447366')
'5546374'
>>> volgende_uitlezing('5546374')
'5546174'
>>> volgende_uitlezing('5546174')
'4635263'
>>> volgende_uitlezing('ABCDEFG')
Traceback (most recent call last):
AssertionError: ongeldige uitlezing

>>> cyclus('4635263')
['4635263', '6447366', '5546374', '5546174']
>>> cyclus('4436426')
['4436426', '4557364', '5546174', '4635263', '6447366', '5546374']
>>> cyclus('ABCDEFG')
Traceback (most recent call last):
AssertionError: ongeldige uitlezing