De code van een cijferslot bestaat uit cijfers, waarbij elk cijfer de waarde t.e.m.
kan aannemen. In deze oefening wensen we alle mogelijke codes te genereren, waarbij vooraf gegeven is dat
de code voldoet aan een aantal randvoorwaarden. Deze randvoorwaarden worden vastgelegd via een woordenboek .
De sleutels in het woordenboek zijn de gehele getallen 0 t.e.m. 9, en de waarden zijn telkens een tuple .
Indien een sleutel in het woordenboek voorkomt, met bijhorden waarde , dan betekent dit dat het cijfer
minstens een hoogstens keer voorkomt in de code. Indien een cijfer niet in het woordenboek voorkomt,
dan zijn er geen voorwaarden verbonden aan het al dan niet voorkomen van dit cijfer.
Schrijf de functie
genereer_codes()
met als argumenten:
- het aantal cijfers in de code
- het woordenboek waaraan de genereerde codes moeten voldoen (zoals hierboven gedefinieerd)
Het resultaat van de functie is een lijst van strings, waarbij elke string bestaat uit karakters, en elk karakter een cijfer
'0'
t.e.m. '9'
voorstelt. Elke genereerde code moet aan de voorwaarden gedefinieerd in het woordenboek
voldoen, en de lijst is gesorteed in opklimmende numerieke waarde van de code.
Voorbeeld
genereer_codes(3, {0:(1, 4), 1:(0, 1), 2:(0, 1), 3:(0, 1), 4:(1, 3), 5:(0, 1), 6:(0, 1), 7:(0, 1), 8:(0, 1)})
= ['004', '040', '044', '049', '094', '400', '404', '409', '440', '490', '904', '940']