Converging on fractions
Weekly challenge 357 — 19 January 2026
Week 357: 19 Jan 2026
Write a function that takes a 4-digit integer and returns how many iterations are required to reach Kaprekar’s constant (6174). For more information about Kaprekar's Constant please see the Wikipedia page.
Example 1 Input: $int = 3524 Output: 3 Iteration 1: 5432 - 2345 = 3087 Iteration 2: 8730 - 0378 = 8352 Iteration 3: 8532 - 2358 = 6174 Example 2 Input: $int = 6174 Output: 0 Example 3 Input: $int = 9998 Output: 5 Iteration 1: 9998 - 8999 = 0999 Iteration 2: 9990 - 0999 = 8991 Iteration 3: 9981 - 1899 = 8082 Iteration 4: 8820 - 0288 = 8532 Iteration 5: 8532 - 2358 = 6174 Example 4 Input: $int = 1001 Output: 4 Iteration 1: 1100 - 0011 = 1089 Iteration 2: 9810 - 0189 = 9621 Iteration 3: 9621 - 1269 = 8352 Iteration 4: 8532 - 2358 = 6174 Example 5 Input: $int = 9000 Output: 4 Iteration 1: 9000 - 0009 = 8991 Iteration 2: 9981 - 1899 = 8082 Iteration 3: 8820 - 0288 = 8532 Iteration 4: 8532 - 2358 = 6174 Example 6 Input: $int = 1111 Output: -1 The sequence does not converge on 6174, so return -1.
This is an interesting constant which I don't remember coming across before. Kaprekar was an Indian recreational mathematician who worked as a school maths teacher. He said of himself: 'A drunkard wants to go on drinking wine to remain in that pleasurable state. The same is the case with me in so far as numbers are concerned.'
I can sympathise with that sentiment.
The challenge is easily solved simply by coding the steps given, the only minor issue being the need to left pad a number with fewer than 4 digits with zeroes.
The literature says that the maximum number of iterations required is 7, and 9875 is an example of one that requires 7 steps.
#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2026-01-19 use utf8; # Week 357 - task 1 - Kaprekar constant use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; use Encode; kaprekar_constant(3524); kaprekar_constant(6174); kaprekar_constant(9998); kaprekar_constant(1001); kaprekar_constant(9000); kaprekar_constant(1111); sub kaprekar_constant { my ($k, $asc, $desc, $n, $explain); # initialise $k = $_[0]; $explain = qq[$k → ]; $n = 0; # repeatedly reverse and subtract while ($k != 6174 and $k != 0) { # ensure 4 digits $asc = substr("000$k", -4, 4); # sort digits $asc = sprintf('%04d', join('', sort(split('', $k)))); # reverse digits and subtract $desc = reverse($asc); $k = abs($asc - $desc); # record $n ++; $explain .= sprintf('%04d', $k) . ' → '; } say qq[\nInput: $_[0];]; say qq[Output: ] . ($k ? (qq[$n ∵ ] . substr($explain, 0, -3)) : -1); }
Input: 3524; Output: 3 ∵ 3524 → 3087 → 8352 → 6174 Input: 6174; Output: 0 ∵ 6174 Input: 9998; Output: 5 ∵ 9998 → 0999 → 8991 → 8082 → 8532 → 6174 Input: 1001; Output: 4 ∵ 1001 → 1089 → 9621 → 8352 → 6174 Input: 9000; Output: 4 ∵ 9000 → 8991 → 8082 → 8532 → 6174 Input: 1111; Output: -1
Any content of this website which has been created by Peter Campbell Smith is in the public domain