Schrijf een stijgende reeks van natuurlijke getallen op een blaadje papier. Deze reeks mag dubbels bevatten. Beschouw bij wijze van voorbeeld de volgende reeks priemgetallen:
2, 3, 5, 7, 11, 13
Noem deze stijgende reeks van natuurlijke getallen $$p_n$$ en noem het grootste natuurlijk getal van de reeks $$m$$. We definiëren nu de frequentiereeks van $$p_n$$ als de reeks van $$m + 1$$ natuurlijke getallen die aangeven hoeveel getallen van $$p_n$$ kleiner zijn dan 1, hoeveel er kleiner zijn dan 2, enzoverder. De frequentiereeks van bovenstaande reeks priemgetallen is dan
0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6
Vreemd genoeg is de frequentiereeks van de frequentiereeks van $$p_n$$ altijd gelijk aan $$p_n$$ (op één extra getal $$m + 1$$ op het einde na). Als we bijvoorbeeld de frequentiereeks van bovenstaande frequentiereeks bepalen, dan krijgen we opnieuw de reeks
2, 3, 5, 7, 11, 13, 14
Verhoog nu de getallen in elk van deze twee reeksen overeenkomstig hun positie in de reeks — dat is, tel 1 op bij het eerste element van elke reeks, 2 bij het tweede element, enzoverder. Dit resulteert in de volgende twee stijgende reeksen van natuurlijke getallen.
3, 5, 8, 11, 16, 19
1, 2, 4, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 20
Deze twee reeksen zullen altijd complementair zijn — alle strikt positieve natuurlijke getallen komen voor, maar ze zijn opgesplitst over de twee reeksen, zonder dubbels.
Implementeer de volgende vier functies, waaraan telkens een reeks (list of tuple) van natuurlijke getallen (int) moet doorgegeven worden.
Een functie stijgend die een Booleaanse waarde (bool) teruggeeft die aangeeft of de getallen in de gegeven reeks al dan niet stijgend zijn. Daarbij is het dus wel toegelaten dat er dubbels voorkomen (met andere woorden: je moet niet nagaan of de reeks strikt stijgend is).
Een functie frequentiereeks die een nieuwe lijst (list) teruggeeft met de getallen (int) van de frequentiereeks van de gegeven reeks. Indien de gegeven reeks niet stijgend is, dan moet de functie een AssertionError opwerpen met de boodschap gegeven reeks is niet stijgend.
Een functie verhogen die een nieuwe lijst (list) teruggeeft die de getallen (int) van de gegeven reeks bevat, maar telkens verhoogd overeenkomstig hun positie in de gegeven reeks — dat is 1 opgeteld bij het eerste getal van de gegeven reeks, 2 bij het tweede getal, enzoverder.
Een functie complementaire_reeksen die een tuple teruggeeft. Het eerste element van dit tuple is een nieuwe lijst (list) met de getallen (int) van de gegeven reeks die verhoogd werden overeenkomstig hun positie in de reeks. Het tweede element van het tuple is een nieuwe lijst (list) met de frequentiereeks van de gegeven reeks, waarvan de getallen (int) verhoogd werden overeenkomstig hun positie in de reeks. Indien de gegeven reeks niet stijgend is, dan moet de functie een AssertionError opwerpen met de boodschap gegeven reeks is niet stijgend.
>>> stijgend([2, 3, 5, 7, 11, 13])
True
>>> stijgend((0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6))
True
>>> stijgend([5, 3, 2, 7, 8, 1, 9])
False
>>> frequentiereeks([2, 3, 5, 7, 11, 13])
[0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6]
>>> frequentiereeks((0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6))
[2, 3, 5, 7, 11, 13, 14]
>>> frequentiereeks([5, 3, 2, 7, 8, 1, 9])
Traceback (most recent call last):
AssertionError: gegeven reeks is niet stijgend
>>> verhogen([2, 3, 5, 7, 11, 13])
[3, 5, 8, 11, 16, 19]
>>> verhogen((0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6))
[1, 2, 4, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 20]
>>> verhogen([5, 3, 2, 7, 8, 1, 9])
[6, 5, 5, 11, 13, 7, 16]
>>> complementaire_reeksen([2, 3, 5, 7, 11, 13])
([3, 5, 8, 11, 16, 19], [1, 2, 4, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 20])
>>> complementaire_reeksen((1, 3, 3, 5, 5, 5, 7, 7, 7, 7))
([2, 5, 6, 9, 10, 11, 14, 15, 16, 17], [1, 3, 4, 7, 8, 12, 13, 18])
>>> complementaire_reeksen([5, 3, 2, 7, 8, 1, 9])
Traceback (most recent call last):
AssertionError: gegeven reeks is niet stijgend