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 deze vier functies waaraan telkens een reeks (list of tuple) van natuurlijke getallen (int) moet doorgegeven worden:
Een functie isstijgend die een Booleaanse waarde (bool) teruggeeft, die aangeeft of de getallen in de gegeven reeks 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) in de frequentiereeks van de gegeven reeks. Als 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 met twee elementen teruggeeft. Het eerste element 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 is een nieuwe lijst (list) met de frequentiereeks van de gegeven reeks, waarvan de getallen (int) verhoogd werden overeenkomstig hun positie in de reeks. Als de gegeven reeks niet stijgend is, dan moet de functie een AssertionError opwerpen met de boodschap gegeven reeks is niet stijgend.
>>> isstijgend([2, 3, 5, 7, 11, 13])
True
>>> isstijgend((0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6))
True
>>> isstijgend([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