Het algoritme voor het opbouwen van een Kaprekarketen werd in 1949 ontdekt door de Indische wiskundige Dattaraya Ramchandra Kaprekar. Het werd oorspronkelijk beschreven voor getallen met vier cijfers, maar kan makkelijk veralgemeend worden voor getallen met $$k$$ cijfers.

kaprekarketen
Grafische voorstelling van het aantal stappen die nodig zijn om de Kaprekarketen te laten eindigen op een waarde die gelijk is aan de volgende waarde, en dit voor de startgetallen $$n = 0, 1, \ldots, 9999$$ verdeeld over rijen van lengte 100. Hierbij worden getallen met minder dan vier cijfers vooraan aangevuld met extra nullen, zodat de Kaprekarketen voor alle waarden $$n$$ convergeert naar 6174.

De Kaprekarketen voor een getal $$n$$ (int) wordt voorgesteld als een lijst (list) waarvan het eerste element het getal $$n$$ zelf is. Het volgende getal (int) wordt berekend als het verschil $$K(n) = n' - n''$$ tussen het getal $$n'$$ dat bestaat uit de cijfers van $$n$$ maar gesorteerd in aflopende volgorde, en het getal $$n''$$ dat bestaat uit de cijfers van $$n$$ maar gesorteerd in oplopende volgorde. Dit volgende getal wordt achteraan de lijst toegevoegd.

We blijven deze procedure herhalen om op basis van het laatste getal in de lijst telkens het volgende getal (int) te berekenen en aan de lijst toe te voegen. De procedure eindigt als het volgende getal gelijk is aan nul, gelijk is aan het vorige getal, of als het reeds in de lijst voorkomt. Een getal dat reeds in de lijst voorkwam, moet finaal niet nogmaals aan de lijst toegevoegd worden.

Opgave

Schrijf een functie kaprekarketen waaraan een getal $$n \in \mathbb{N}$$ (int) moet doorgegeven worden. De functie moet de Kaprekarketen (list) voor het gegeven getal $$n$$ teruggeven.

Voorbeeld

>>> kaprekarketen(677)
[677, 99, 0]
>>> kaprekarketen(9876)
[9876, 3087, 8352, 6174]
>>> kaprekarketen(55500)
[55500, 54945, 50985, 92961, 86922, 75933, 63954, 61974, 82962]