Éric Angelini ontdekte deze reeks die zichzelf progressief beschrijft:
10 71 32 23 14 15 16 27 18 19
20 81 72 53 44 35 26 47 38 29
40 101 82 73 64 65 56 77 58 39
60 131 92 93 74 75 86 107 88 69
80 201 122 113 84 85 96 117 138 89
De eerste regel beschrijft zichzelf: ze bevat één keer het cijfer 0, zeven keer het cijfer 1, drie keer het cijfer 2, twee keer het cijfer 3, enzoverder.
Op een analoge manier beschrijft de tweede regel de gezamelijke inhoud van de eerste twee regels: ze bevatten samen twee keer het cijfer 0, acht keer het cijfer 1, zeven keer het cijfer 2, vijf keer het cijfer 3, enzoverder.
Ook de volgende regels beschrijven hun eigen inhoud en die van alle voorgaande regels. De vijfde regel beschrijft de gezamelijke inhoud van alle regels: ze bevatten samen acht keer het cijfer 0, twintig keer het cijfer 1, twaalf keer het cijfer 2, elf keer het cijfer 3, enzoverder.
Hij vermoedt dat een zelfbeschrijvende reeks met zes regels er misschien ook wel moet inzitten, maar tot nu toe heeft hij er nog geen gevonden.
De cijferfrequentie van een string $$s$$ (String) is een reeks (Array) van tien getallen $$[a_0, a_1, \ldots, a_9]$$, waarbij $$a_i \in \mathbb{N}$$ (Number) aangeeft hoeveel keer het cijfer $$i$$ voorkomt in $$s$$ ($$i = 0, 1, \ldots, 9$$).
De beschrijving van een cijferfrequentie $$(a_0, a_1, \ldots, a_9)$$ is een string (String) die wordt opgemaakt als
$$a_0$$0 $$a_1$$1 $$\ldots$$ $$a_9$$9
Daarbij worden voorloopnullen in de weergave van $$a_i$$i ($$i = 0, 1, \ldots, 9$$) weggelaten: als het cijfer 3 niet voorkomt in de string $$s$$ dan schrijven we in de beschrijving van de cijferfrequentie gewoon 3 en niet 03. Gevraagd wordt:
Schrijf een functie cijferfrequentie waaraan een string (String) moet doorgegeven worden. De functie moet de cijferfrequentie van de gegeven string teruggeven.
Schrijf een functie beschrijving waaraan de cijferfrequentie van een string moet doorgegeven worden. De functie moet de beschrijving van de gegeven cijferfrequentie teruggeven.
Schrijf een functie iszelfbeschrijvend waaraan een variabel aantal van $$n \in \mathbb{N}$$ strings (String) kunnen doorgegeven worden. De functie moet een Booleaanse waarde (Boolean) teruggeven, die aangeeft of de $$n$$ strings een reeks vormen die zichzelf progressief beschrijft. Dat is het geval als elke $$i$$-de string de beschrijving is van de gezamelijke inhoud van de eerste $$i$$ strings ($$i = 1, 2, \ldots, n$$).
Een lege reeks is per definitie zelfbeschrijvend.
> cijferfrequentie("10 71 32 23 14 15 16 27 18 19")
[1, 7, 3, 2, 1, 1, 1, 2, 1, 1]
> cijferfrequentie("F1gur471v3ly 5p34k1ng?")
[0, 3, 0, 2, 2, 1, 0, 1, 0, 0]
> beschrijving([1, 7, 3, 2, 1, 1, 1, 2, 1, 1])
"10 71 32 23 14 15 16 27 18 19"
> beschrijving([0, 3, 0, 2, 2, 1, 0, 1, 0, 0])
"0 31 2 23 24 15 6 17 8 9"
> iszelfbeschrijvend("10 71 32 23 14 15 16 27 18 19")
true
> iszelfbeschrijvend("F1gur471v3ly 5p34k1ng?")
false
> iszelfbeschrijvend("10 71 32 23 14 15 16 27 18 19", "20 81 72 53 44 35 26 47 38 29")
true
> iszelfbeschrijvend("10 71 32 23 14 15 16 27 18 19", "20 81 72 53 44 35 26 47 38 29", "40 101 82 73 64 65 56 77 58 39", "60 131 92 93 74 75 86 107 88 69", "80 201 122 113 84 85 96 117 138 89")
true