Het getal 6174 is bekend als de constante van Kaprekar, genoemd naar de Indiase wiskundige Shri Dattathreya Ramachandra Kaprekar (1905 - 1988).
De eigenschap die dit getal bezit wordt aangegeven door de volgende stappen te doorlopen:
- Neem een willekeurig natuurlijk getal van 4 cijfers.
- Zet de cijfers in oplopende en in aflopende volgorde, zodat twee getallen van 4 cijfers worden verkregen.
- Trek het kleinste van het grootste getal af.
- Keer terug naar stap 2.
Bij deze procedure wordt in maximaal zeven stappen het getal 6174 verkregen, en daarna komen er geen nieuwe getallen meer bij.
De procedure eindigt vanwege 7641 − 1467 = 6174. Neem bijvoorbeeld het startgetal 5342.
5432 - 2345 = 3087
8730 - 0378 = 8352
8532 - 2358 = 6174
Als na de aftrekking een getal van minder dan 4 cijfers ontstaat, moet(en) daar nul(len) voor gezet worden opdat er
weer een getal van 4 cijfers ontstaat. Dus 999 wordt geschreven als 0999. Neem bijvoorbeeld het startgetal 9990:
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
De enige getallen van 4 cijfers waarvoor deze procedure niet werkt zijn herhaalde cijfers zoals 3333,
die na één iteratie de waarde 0 geven.
Kaprekar
Opgave
In deze oefening is het de bedoeling dat bij een gegeven startgetal, een rijtje van (maximaal 7) verschillen uitgeschreven wordt.
We doen dit in verschillende stappen.
- Programmeer de functie splits. Deze functie heeft één parameter: een getal van 4 cijfers die niet allemaal gelijk zijn aan elkaar.
Je geeft de 4 cijfers uit dit getal van links naar rechts terug als afzonderlijke cijfers.
- De functie oplopende_cijfers vraagt 4 cijfers en geeft deze cijfers afzonderlijk terug in oplopende volgorde.
- Om van vier cijfers een getal met oplopende cijfers en aflopende cijfers te maken, programmeer je op_af_getallen.
Deze functie vraagt 4 cijfers in oplopende volgorde en geeft twee strings terug: eerst het getal met oplopende cijfers, dan
het getal met aflopende cijfers. De twee getallen moet je in string-formaat teruggeven om te vermijden dat eventuele voorloopnullen verloren gaan.
- Nadat je het oplopend en aflopend getal bekomen hebt, programmeer je de functie verschil. De eerste parameter van
deze functie is het getal met aflopende cijfer, de tweede parameter het getal met oplopende cijfers. De functie geeft een string
terug met het verschil van de tweede getallen. Bijvoorbeeld '5432 - 2345 = 3087'
- Ten slotte geef je aan de functie kaprekar. De parameter van deze functie is het startgetal. De functie geeft één string
terug met daarin, gesplitst over verschillende regels, alle verschillen tot de constante van Kaprekar bereikt wordt. Je mag ervan uitgaan
dat 6174 nooit het startgetal is.
Voorbeeld
>>> splits(2741)
(2, 7, 4, 1)
>>> splits(5342)
(5, 3, 4, 2)
>>> oplopende_cijfers(2,7,4,1)
(1, 2, 4, 7)
>>> oplopende_cijfers(5,3,4,2)
(2, 3, 4, 5)
>>> op_af_getallen(1,2,4,7)
('1247', '7421')
>>> op_af_getallen(2,3,4,5)
('2345', '5432')
>>> verschil('7421','1247')
6174
>>> verschil('5432','2345')
3087
>>> kaprekar(2741)
7421 - 1247 = 6174
>>> kaprekar(5342)
5432 - 2345 = 3087
8730 - 0378 = 8352
8532 - 2358 = 6174