Jouw vlucht vertrekt over een paar dagen vanaf de luchthaven aan de kust. De makkelijkste route vanaf hier naar de kust af te dalen is via een rodelbaan1.

De winkelier van de Noordpool Rodelshop heeft duidelijk een slechte dag:

Er is iets mis met onze computers. We kunnen niet inloggen!

Je vraagt of jij er eens mag naar kijken.

Hun databank met wachtwoorden lijkt een beetje beschadigd: sommige wachtwoorden waren ongeldig volgens het Officieel Wachtwoordbeleid voor Rodelaars die van toepassing was op het ogenblik dat ze gekozen werden.

Om het probleem te proberen debuggen, hebben ze een lijst van wachtwoorden uit de beschadigde databank gehaald, samen met de wachtwoordbeleid van het bedrijf toen de wachtwoorden ingesteld werden.

Stel bijvoorbeeld dat je de volgende lijst krijgt:

1-3 a: abcde
1-3 b: cdefg
2-9 c: ccccccccc

Elke regel bevat een wachtwoordbeleid, gevolgd door een dubbelpunt (:), een spatie en een wachtwoord. Het wachtwoordbeleid geeft aan wat het minimaal en het maximaal aantal keer is dat een gegeven letter in een wachtwoord mag voorkomen om geldig te zijn. Zo betekent 1-3 a bijvoorbeeld dat het wachtoord minstens 1 keer en hoogstens 3 keer de letter a mag bevatten.

In het bovenstaande voorbeeld zijn er 2 geldige wachtwoorden. Het middelste wachtwoord cdefg is ongeldig. Het bevat geen enkele keer de letter b, terwijl er minstens 1 had moeten voorkomen. Het eerste en het derde wachtwoord zijn geldig: ze bevatten één a of negen c en die liggen beide binnen de grenzen van hun respectievelijke wachtwoordbeleid.

Opgave

Schrijf een functie is_valid_password waaraan twee strings (char*) moeten doorgegeven worden: i) een wachtwoord en ii) het wachtwoordbeleid toen het wachtwoord werd ingesteld. De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of het gegeven wachtwoord geldig is volgens het gegeven wachtwoordbeleid.

Voorbeeld

> is_valid_password("abcde", "1-3 a")
true
> is_valid_password("cdefg", "1-3 b")
false
> is_valid_password("ccccccccc", "2-9 c")
true