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 een 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 (Array
) van natuurlijke getallen (Number
) moet doorgegeven worden.
Een functie stijgend
die een Booleaanse waarde (Boolean
) teruggeeft die aangeeft of de getallen in de gegeven reeks stijgend zijn. Daarbij is het dus wel toegelaten dat er dubbels voorkomen in de reeks.
Een functie frequentiereeks
die een nieuwe reeks (Array
) teruggeeft met de getallen (Number
) van de frequentiereeks van de gegeven reeks. Als de gegeven reeks niet stijgend is, dan moet de functie een Error
opwerpen met de boodschap gegeven array is niet stijgend
.
Een functie verhogen
die een nieuwe reeks (Array
) teruggeeft die de waarden van de gegeven reeks bevat, maar dan verhoogd overeenkomstig hun positie in de gegeven reeks — dat is 1 opgeteld bij het eerste element van de gegeven reeks, 2 bij het tweede element, enzoverder.
Een functie complementaireReeksen
die een nieuwe reeks (Array
) teruggeeft. Het eerste element van deze array is een nieuwe reeks (Array
) met de waarden van de gegeven reeks die verhoogd werden overeenkomstig hun positie in de reeks. Het tweede element van de reeks is een nieuwe reeks (Array
) met de frequentiereeks van de gegeven reeks, waarvan de waarden verhoogd werden overeenkomstig hun positie in de reeks. Als de gegeven reeks niet stijgend is, dan moet de functie een Error
opwerpen met de boodschap gegeven array 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
> 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]
> 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]
> complementaireReeksen([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]]
> complementaireReeksen([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]]