Code Golf: 6174 - Kaprekar's mythical constant

24

2

Why is the number 6174 so interesting? As defined by Wikipedia

  1. Take any four-digit number, using at least two different digits. (Leading zeros are allowed.)
  2. Arrange the digits in ascending and then in descending order to get two four-digit numbers, adding leading zeros if necessary.
  3. Subtract the smaller number from the bigger number.
  4. Go back to step 2.

The above process, known as Kaprekar's routine, will always reach 6174 in at most 7 iterations. Once 6174 is reached, the process will continue yielding it.

Write a program which runs the Kaprekar's routine against a given four-digit number (see definition above) printing out each step of the routine.

Rules:

  • Submissions must be complete programs.
  • Input must be read from standard input. Piping from echo is OK.
  • Input should be in numeric form.
  • Printing out leading zeros is required. (See examples below.)
  • Last line should say how many iterations were needed. Punctuation is required.

Examples:

> 2607
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3.

> 1211
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5.

> 6174
7641 - 1467 = 6174
Iterations: 1.

Any programming language is welcome. Extra points for esoteric ones + a small bounty.

Update 1: There is already a similar question.

Update 2: Added example for 6174 as input. Thanks to Peter Taylor for the notice.

lunohodov

Posted 2011-06-06T21:38:41.077

Reputation: 243

This is the exact same question I had to do in the NCSS challenge. If you're doing this to get other people to give you the answer in the NCSS challenge, then that's pretty bad and it defeats the purpose of a challenge. If you're not, then I apolagize. – None – 2012-10-17T04:19:27.970

This question was posted in the middle of last year - I very much doubt anyone was trying to cheat for some test or challenge. – Gareth – 2012-10-20T08:38:26.210

This is news for me. Someone call a moderator... – None – 2011-06-06T21:44:02.463

Uh... isn't there a "migrate" button? – HostileFork says dont trust SE – 2011-06-06T22:20:24.207

I've flagged this for a moderator to migrate. May I suggest altering the rules on input output to agree with the earlier 3-digit version? And linking to the earlier version in the body of the question. – dmckee --- ex-moderator kitten – 2011-06-07T01:12:44.077

@dmckee I didn't know about this site and could not know that there is already a similar question (on stackoverflow there was none). However I would hesitate altering the rules to agree with the 3-digit version and thus making the two questions even more similar. It is pointless to post a duplicate or a slight variation of an existing question. Even when done unintentional. – lunohodov – 2011-06-08T08:47:09.807

@lunohodov: Well, it's your question. I think that despite the surface similarities the questions are different in an interesting way because the particular trick used by several posters in the earlier one (independence of the series from the middle sized digit) does not apply here. – dmckee --- ex-moderator kitten – 2011-06-08T12:47:20.520

3Please add 6174 as an example so we can see how the output should be formatted. – Peter Taylor – 2011-06-10T06:26:26.827

I took the liberty of fixing your test cases. Given that I always copy the test cases from the original question to test against (Yes, I write a script for that nearly every time, unless the author provides one), it isn't very nice of you to (a) have a wrong digit in the first one and (b) using U+2013 instead of U+002D as the minus. I just sat there wondering why my program fails, yet yields apparently correct output. – Joey – 2011-06-10T09:43:55.993

@Joey Bad me. Thank you. – lunohodov – 2011-06-10T14:34:04.657

@lunohodov If you already have 6174 as input, do you really need one iteration to reach 6174? I only ask because I'll have to write a special case in my program if you do. :-( – Gareth – 2011-06-10T15:31:21.043

@Gareth Yes, as the task is, as defined above, to run the Kaprekar's routine against a given four-digit number and 6174 should be treated as such. – lunohodov – 2011-06-12T10:15:18.803

Answers

9

Perl - 147 143 134 130 129 126 129 128 126

for($_=<>;$_-6174+!$c;$c++){$_=reverse$d=join'',sort split//,"$_"
|$|x4;printf"$_ - $d = %04d\n",$_-=$d}die"Iterations: $c.\n"

EDIT: Now complies with 6174 case, at the cost of a few chars... run with echo -n <number> | perl kaprekar.pl

EDIT: Finally back to where I was before :D

swilliams

Posted 2011-06-06T21:38:41.077

Reputation: 476

10

Ruby 1.9, 122 characters

puts"Iterations: #{(1..7).find{s=$_.chars.sort*"";puts [r=s.reverse,?-,s,?=,$_="%04d"%(r.to_i-s.to_i)]*" ";~/6174/}}."

Example invocation:

$ echo 1211 | ruby -ln kaprekar.rb

I've counted the -ln flag as 4 characters (difference between the normal invocation ruby kaprekar.rb and ruby -ln kaprekar.rb).

Ventero

Posted 2011-06-06T21:38:41.077

Reputation: 9 842

I saved this script as kaprekar.rb then invoked it with ruby -lp kaprekar.rb. Entered a number and pressed <Enter> but the output is the entered number itself. Clearly I am missing something... Please advise how to use the script. – lunohodov – 2011-06-16T12:52:04.497

@lunohodov: I've added an example invocation. It now also generates the correct output for 6174 as input, which unfortunately brings this solution up to 128 characters. – Ventero – 2011-06-16T21:54:36.097

Using echo 1234 | ruby kaprekar.rb raises a warning and ends with an error undefined method 'chars' for nil:NilClass (NoMethodError). Executing echo 1234 | ruby -lp kaprekar.rb issues only a warning and behaves as expected. The output is not as expected, as it contains a warning message kaprekar.rb:3: warning: regex literal in condition – lunohodov – 2011-06-17T09:12:53.103

@lunohodov: Fixed the warning and the example invocation. – Ventero – 2011-06-17T09:30:14.983

7

Python, 141 chars

n=input()
i=0
while n-6174:a=''.join(sorted("%04d"%n));b=a[::-1];n=int(b)-int(a);print"%s - %s = %04d"%(b,a,n);i+=1
print"Iterations: %d."%i

Martin Ueding

Posted 2011-06-06T21:38:41.077

Reputation: 171

+1 for slick padding with %04d. I learned something today! – arrdem – 2011-06-07T20:49:45.207

3A few suggestions: put the whole loop on one line using ;s. while n-6174. No space between print and the quote. – Keith Randall – 2011-06-08T03:31:16.717

@keith-randall: thanks, got it down to 141 now. – Martin Ueding – 2011-06-08T11:55:32.147

6

Golfscript, 74 characters

);:|;{0):0;|$:§-1%" - "§" = ""0"4$~§~-+-4>:|n|6174`=!}do"Iterations: "0"."

Ventero

Posted 2011-06-06T21:38:41.077

Reputation: 9 842

5

Haskell, 197 192 182 181 characters

import List
p=putStrLn.unwords
"6174"%k|k>0=p["Iterations:",shows k"."]
n%k=p[b,"-",a,"=",c]>>c%(k+1)where a=sort n;b=reverse a;c=take 4$shows(read b-read a)"0"
main=getLine>>=(%0)

hammar

Posted 2011-06-06T21:38:41.077

Reputation: 4 011

Inlining r and s saves 2 characters. Also, "000" is redundant. "0" is enough. This brings us to 188 characters. I'm surprised interact does not help here. It usually does. – Rotsor – 2011-06-20T04:04:59.727

Replacing show x++s with shows x s gains 2 more bytes. 186 now. – Rotsor – 2011-06-20T04:28:36.377

By using pattern guards (|k>0) one can get rid of f. Further renaming g to % gets us to 182 chars. – Rotsor – 2011-06-20T05:18:57.477

4

JavaScript, 189 182 165 chars

Credit to DocMax:

for(n=prompt(i=o=e='');!i--|n-6174;o+=n+' - '+a+' = '+(n=(p=n-a+e)[3]?p:0+p)+'\n')
  b=n.split(e).sort(),n=b.reverse(a=b.join(e)).join(e);
alert(o+"Iterations: "+~i+'.')

Original:

for(n=prompt(i=o=e='');n-6174;o+=(i++?n+"\n":e)+(n=(a=n.split(e).sort().join(e)).split(e).reverse().join(e))+' - '+a+' = ',n=n-a+e)while(!n[3])n=0+n
alert(o+n+"\nIterations: "+i+'.')

Ungolfed:

var i = 0;
var n = prompt();
var out = '';
while (n != 6174) {
    while ((n=''+n).length<4) n='0'+n // pad number
    if(i)out+=n+"\n"

    a = n.split('').sort().join('');
    n = a.split('').reverse().join('');

    out += n + ' - ' + a + ' = '
    n-=a
    i++;
}
console.log(out + "6174\nIterations: " + i + '.');

Casey Chu

Posted 2011-06-06T21:38:41.077

Reputation: 1 661

1I think that you can change n != 6174 to n-6174 since it will return zero, which is false (at least in C and Python). – Martin Ueding – 2011-06-10T12:56:20.323

The credit should go to keith-randall who suggested it for my Python solution. – Martin Ueding – 2011-06-10T16:57:16.793

You can save 5 more characters by replacing while(n.length<4) with while(!n[3]). – DocMax – 2011-06-16T03:27:05.367

One more: replace o+"6174\n with o+n+"\n to save 2 more (down to 182). – DocMax – 2011-06-16T04:17:42.090

1I can't stop staring at this one! The following a) fixes the output when n=6174, b) rearranges when n+'\n' is added to avoid the conditional and an extra \n, c) uses a temp to avoid a join-split-join sequence, d) takes advantage of the fact that we only ever have to add a single '0' for padding: for(n=prompt(i=0,o=e='');n-6174;i++,o+=(n=(b=n.split(e).sort(),a=b.join(e),b).reverse().join(e))+' - '+a+' = '+(n=('0'+(n-a)).slice(-4))+'\n');alert(o+"Iterations: "+i+'.') which should be 172 chars. – DocMax – 2011-06-17T06:31:13.360

1Impressive! According to the spec above though, when n=6174, it has to go through at least one iteration, so I added a check if i is 0 (+4) but combined that with the i++. Unfortunately, that gives an off by one error, so I switched the increment to a decrement and then used a little bitwise trickery at the end (-1). Then I changed i=0,o=e='' to i=o=e='' (-2), reformatted the for loop to avoid extra parentheses (-1), expanded (b=...,a=...,b) bit (-2), and sneaked a=b.join inside the reverse() call (-1). So 169, not bad! – Casey Chu – 2011-06-17T08:00:51.410

...Couple more! Replaced n=('0'+(n-a)).slice(-4) with n=(p=n-a+e)>999?p:0+p (-2) and replaced logical OR || with bitwise OR | (-1) = 166 chars. – Casey Chu – 2011-06-17T08:39:58.803

I love sliding something into reverse(). I would never have through of it. I'm not seeing much more now, but there is replacing the new n=(p=n-a+e)>999?p:0+p with an old friend in n=(p=n-a+e)[3]?p:0+p (-1) = 165 chars. – DocMax – 2011-06-18T05:49:30.893

4

><> - 268 308

</&4pff1
v>i86*-:n&1-:&?!
>ao&        v
<v&0pff+1gff
 >&1+:4=   ?v&:a%:}-a,
 v&8[4r::0}~<
 >&1-:?!v&:@@:@(?$}&:&3%1=?}
 v      >~:}}:}@:}$:}
 \:n}:n}:n}:n}' - 'ooo:n}:n}:n}:n}' = 'ooo
 \a*+a*+a*+}a*+a*+a*+-:0&\
 v?       =4&:+1&,a-}:%a:<
/\&~~rnnnnao:29777****=   ?v
voooooooooooo"Iterations: "/
\ffgna'.'oo;

Not much of a contender for golf, but it was fun to write. :)

Run with ./fish.py kaprekar.fish -v <number>
EDIT: Now takes input from STDIN.

swilliams

Posted 2011-06-06T21:38:41.077

Reputation: 476

3

PowerShell, 125 128 130 131

for($a,$OFS=$input+'';$b-6174;++$i){$a=$b=+($c=''+($x="$a 000"[0..4]|sort)[4..0])-"$x"
"$c-$x = {0:d4}"-f$a}"Iterations: $i."

Passes all test cases from the question.

Joey

Posted 2011-06-06T21:38:41.077

Reputation: 12 260

2

JavaScript, 260 bytes

function z(c){for(u=c+y;u.length<4;)u=0+u;return u}for(p=prompt(i=0,r=y="");;)
if(s=(p+y).split(y).sort(),t=s.concat().reverse(),a=s.join(y),b=t.join(y),q=a<b?b:a,
w=a<b?a:b,p=z(q-w),i++,r+=z(q)+" - "+z(w)+" = "+p+"\n",p==6174)break;alert(r+
"Iterations: "+i+".")

pimvdb

Posted 2011-06-06T21:38:41.077

Reputation: 821

2

Scala 276

object o{var i=0;def a(v:String){val c=v.toList.sortWith(_>_).mkString;val b=c.reverse;val d=c.toInt-b.toInt;val e="0"*(4-(d+"").length)+d;val p=c+" - "+b+" = "+e;if(d!=6174){println(p);i=i+1;a(e)}else{println(p+"\nIterations: "+(i+1)+".")}};def main(s:Array[String])=a(s(0))}

Scala 283

object o{var i=0;def a(v:String){val c=v.toList.sortWith(_>_).mkString;val b=c.reverse;val d=c.toInt-b.toInt;val e="0"*(4-(d+"").length)+d;val p=c+" - "+b+" = "+e;if(d!=6174){println(p);i=i+1;a(e)}else{println(p);println("Iterations: "+(i+1)+".")}};def main(s:Array[String])=a(s(0))}

diff:

else{println(p);println("Iterations: "+(i+1)+".")}};
// to
else{println(p+"\nIterations: "+(i+1)+".")}};

Lalith

Posted 2011-06-06T21:38:41.077

Reputation: 251

2

Clojure, 256 characters

(let[i #(Integer/parseInt%)f #(format"%04d"%)a #(->>% f sort(apply str)i)d #(->>% f sort reverse(apply str)i)k #(let[u(d %)l(a %)n(- u l)](println(f u)"-"(f l)"="(f n))n)](while true(println"Iterations:"(count(take-while #(not=% 6174)(iterate k(read)))))))

kotarak

Posted 2011-06-06T21:38:41.077

Reputation: 121

2

Scala 2.9, 194 characters

object K extends App{var(c,s)=(0,args(0));do{var d=s.sorted;var e=d.reverse.toInt-d.toInt;s="%04d".format(e);println(d.reverse+" - "+d+" = "+s);c+=1}while(s!="6174");print("Iterations: "+c+".")}

Makes use of the App trait from Scala 2.9.

Edit: gives correct output for initial input of 6174.

Gareth

Posted 2011-06-06T21:38:41.077

Reputation: 11 678

2

PHP, 215 259 276 characters

<?php echo">";$n=str_split(str_pad(trim(fgets(STDIN)),4,0,0));for($k=0,$z=0;$k-6174;$z++){sort($n);$a=implode($n);$b=strrev($a);$k=str_pad($b-$a,4,0,0);echo"$b - $a = $k\n";$n=str_split($k);}echo"Iterations: $z\n";

Ungolfed:

<?php
echo ">";
$n = str_split(str_pad(trim(fgets(STDIN)),4,0,0));
for($k=0, $z=0; $k-6174; $z++) {
    sort($n);
    $a = implode($n);
    $b = strrev($a);
    $k = str_pad($b-$a,4,0,0);
    echo "$b - $a = $k\n";
    $n = str_split($k);
}
echo "Iterations: $z\n";

rintaun

Posted 2011-06-06T21:38:41.077

Reputation: 751

<?function k($c){echo"> $c\n";$n=str_split(str_pad($c,4,0,0));for(;$k-6174;$z++){sort($n);$a=join($n);$b=strrev($a);$k=str_pad($b-$a,4,0,0);echo"$b - $a = $k\n";$n=str_split($k);}echo"Iterations: $z\n";}

You can save 12 characters by changing your for statement, calling this as a function and using join instead of implode. – TwoScoopsofPig – 2012-10-17T19:02:27.390

Also, I hate mini-markdown. – TwoScoopsofPig – 2012-10-17T19:03:52.053

I don't think you need the abs, max and min functions, since the sort will always mean that $b is greater than $a. That could save you 20ish characters. Also, I think that putting the sort inside the loop at the top will mean you only need to have it in your code once which will save you another 9. – Gareth – 2011-06-15T08:05:13.773

Wow, I guess I got distracted by the "subtract the smaller number from the bigger number" instruction. Thanks. – rintaun – 2011-06-15T08:25:23.290

2

CoffeeScript, 233 225 characters

o=e='';i=0;n=prompt()
while n!=6174
  n=e+n;q=(n='0'+n if !n[3]) for x in [0..2];n?=q;o+=n+"\n" if i;a=n.split(e).sort().join(e);n=a.split(e).reverse().join(e);o+=n+' - '+a+' = ';n-=a;i++
alert(o+"6174\nIterations: "+i+'.')

Try it here or with instructions here.

Jonas Elfström

Posted 2011-06-06T21:38:41.077

Reputation: 373

My browser freezes - had to cancel the execution of the script. – lunohodov – 2011-06-16T17:31:12.690

What number did you enter? I tried it in Firefox and Chrome for 4711 and 1 and a couple of others. – Jonas Elfström – 2011-06-16T20:19:46.553

Using 0 (as suggested by the prompt) or clicking the cancel button causes Safari to freeze. – lunohodov – 2011-06-17T09:17:48.030

I don't know why it suggested that. You have to enter a number between 1 and 9998 whose digits are not all identical. 0 is the same as 0000 and will cause an infinite loop. It seems most of the solutions here skipped validating input to keep the number of characters down. – Jonas Elfström – 2011-06-17T11:43:37.290

See http://i56.tinypic.com/bhhoqe.png Your output also ends with "It took 5 iterations to reach Kaprekar's constant." which does not conform to the requirements.

– lunohodov – 2011-06-17T12:12:04.343

True. New link in the answer to the actual JavaScript that the CoffeeScript above compiles to. – Jonas Elfström – 2011-06-17T12:23:05.307

2

GAWK - 152 chars

This is a GNU awk version. It may not work with other non-gnu versions.

{for(z=$1;z-6174+!c;++k){split(z,a,"");asort(a);for(b=c=i=0;i<4;z=c-b){c+=a[i+1]*10^i;b=b*10+a[++i]}printf c" - %.4d = "z"\n",b}print"Iterations: "k"."}

$ awk -f k.awk <<< 9992
2999 - 9992 = 6993
3699 - 9963 = 6264
2466 - 6642 = 4176
1467 - 7641 = 6174
Iterations: 4

Dan Andreatta

Posted 2011-06-06T21:38:41.077

Reputation: 211

The subtraction numbers are the wrong way round: e.g. should be 9992 - 2999 = 6993 – Chris Degnen – 2014-01-12T21:10:18.930

I receive awk: calling undefined function asort. Awk version is 20070501 running on OSX 10.6.7. Don't forget the . after the number of iterations. – lunohodov – 2011-06-25T11:40:21.487

lunohodov@: Added missing point. Also, I have used gnu awk (gawk), and that may explain the missing function. – Dan Andreatta – 2011-06-26T07:53:57.877

2

Ruby, 179 chars but posting anyway

s=gets.chomp
n=0
begin
  s=s.to_s.chars.sort.reduce{|s,c|s+c}.rjust(4,'0')
  a=s.reverse
  puts"#{a} - #{s} = #{'%04d'%(s=a.to_i-s.to_i)}"
  n+=1
end while s!=6174
puts"Iterations: #{n}."

Joaquim Rendeiro

Posted 2011-06-06T21:38:41.077

Reputation: 131

ruby is pretty cool – don bright – 2019-03-22T02:27:08.340

1

Mathematica, 314 291 characters

This is the program, kaprekar.m :-

SetOptions[$Output,FormatType->OutputForm];
x=$ScriptCommandLine[[2]];
f[x_]:=(a=Characters@x;
b=Sort@ToExpression@a;
c=Sort[FromDigits/@{#,Reverse@#}&@b];
{c,{b,a}}=IntegerString[{#2-#&@@c,c},10,4];
Print[a," - ",b," = ",c];c)
x=f@x;
e=NestWhileList[f,x,#!="6174"&];
Print["Iterations: ",N@Length@e]

Setting the path prior to running :-

$ PATH=${PATH}:/Applications/Mathematica.app/Contents/MacOS ; export PATH

Running the program :-

$ MathematicaScript -script kaprekar.m 2607
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3.
$ MathematicaScript -script kaprekar.m 1211
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5.
$ MathematicaScript -script kaprekar.m 6174
7641 - 1467 = 6174
Iterations: 1.

Chris Degnen

Posted 2011-06-06T21:38:41.077

Reputation: 191

1

PERL

chomp($n=<STDIN>);
    do{
       $t++;
       $desc=join('',reverse sort split(//,$n));
       $asc=join('', sort split(//,$n));
       $n=($desc - $asc);
       for($i=4;$i>length $n;$i--){
          $n="0".$n;
       }
       print $desc." - ".$asc." = ".$n."\n";
       $n="6174" if $n eq "0000";
    }while($n ne "6174");
    print "Iterations: $t.\n";

Aman ZeeK Verma

Posted 2011-06-06T21:38:41.077

Reputation: 609

Thats ~310 chars... – Aman ZeeK Verma – 2011-06-14T17:40:23.017

1

K, 104

{b::();{b,:,k," = ",r:"0"^(-:4)$$. k:(x@>x)," - ",x@<x;r}\[$x];-1'c,,"Iterations: ",$#c:$[1=#b;b;-1_b];}

Test cases

k){b::();{b,:,k," = ",r:"0"^(-:4)$$. k:(x@>x)," - ",x@<x;r}\[$x];-1'c,,"Iterations: ",$#c:$[1=#b;b;-1_b];}'2607 1211 6174;
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5
7641 - 1467 = 6174
Iterations: 1

tmartin

Posted 2011-06-06T21:38:41.077

Reputation: 3 917

0

PHP, 160 bytes

function k($n,$d=1){$o=str_split($n);sort($o);echo$q=strrev($r=join($o))," - $r = ",$n=str_pad($q-$r,4,0,0),"
",$n==6174?"Iterations: $d.":k($n,++$d);}k($argn);

Try it online!

Complete program, input is STDIN, run with php -nF.

Output

> echo 2607|php -nF kap.php
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3.

> echo 1211|php -nF kap.php
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5.

> echo 6174|php -nF kap.php
7641 - 1467 = 6174
Iterations: 1.

640KB

Posted 2011-06-06T21:38:41.077

Reputation: 7 149

0

Rust - 375 bytes

use std::io::{self,BufRead};fn main() {let mut x=io::stdin().lock().lines().next().unwrap().unwrap().parse::<i16>().unwrap();let mut n=0;println!("Iterations: {}.",loop {let mut v=[x/1000%10,x/100%10,x/10%10,x%10];v.sort();let j=v.iter().fold(0,|a,i|a*10+i);let k=v.iter().rev().fold(0,|a,i|a*10+i);x=k-j;n+=1;println!("{:04} - {:04} = {:04}",k,j,x);if x==6174{break n};});}

I present this as a possible "upper bound", I challenge anyone to find a language where a reasonable implementation of this is longer - as in there is nothing superfluous, but also nothing even remotely obvious that would shrink it significantly. The thing about Rust is that it takes about 120 characters just to read from stdin and parse into an integer. "Oh but then just use the string representation"... but im 99% confident that would be even longer

don bright

Posted 2011-06-06T21:38:41.077

Reputation: 1 189

0

Perl 6 -n flag, 105 bytes

say "Iterations: "~+.&{{{say $!=.flip~" - $_"," = ",($/=$!.EVAL.fmt("%04d"));$/}([~] .comb.sort)}...6174}

Try it online!

I finally got to use my {}...* trick, since we need to have at least one iteration for 6174. I'm not sure why I need the extra wrapping .&{ } around the sequence though, which kinda sucks.

Explanation:

    .&{                         } # Call a function on the input
       {                }...6174  # Create a sequence that goes until 6174
        {           }([~] .comb.sort) # Get the sorted digits of the number
         say $!=.flip~" - $_"," = "~($/=$!.EVAL.fmt("%04d"))  # Print the iteration
                        ;$/  # Return the result
say "Iterations: "~+.&{      }     # Print the number of iterations

Jo King

Posted 2011-06-06T21:38:41.077

Reputation: 38 234