6174 はカプレカの定数というそうで、各桁の数字を大きい順に並べた数字と小さい順に並べた数字の差が自分自身になる数字だそうです (7641 - 1467 = 6174) 。(ぞろ目以外の) 任意の 4 桁の数字に対してこの操作を繰り返すと必ず 6174 になるそうです。graphviz でグラフ化してみたら、何となく面白かっこいい絵になりました。
桁数 1 の場合: 0 になる
桁数 2 の場合: 00 になるか、09 -> 81 -> 63 -> 27 -> 45 -> 09 ... のループになる
桁数 3 の場合: 000 か 495 になる
桁数 4 の場合: 0000 か 6174 になる
桁数 5 の場合: 00000 になるか、74943 -> 62964 -> 71973 -> 83952 -> 74943 ... のループか、63954 -> 61974 -> 82962 -> 75933 -> 63954 ... のループか、53955 -> 59994 -> 53955 ... のループになる
桁数 6 は graphviz がいつまでたっても終わりませんでした。
N = ARGV[0].to_i h = {} (10 ** (N - 1) .. 10 ** N - 1).each do |i| until h[i] j = ("%0#{N}d" % i).unpack("C*").sort.pack("C*") h[i] = i = j.reverse.to_i - j.to_i end end puts "digraph G {" puts " node [fixedsize=true, width=#{ARGV[1] || 0.7}, height=#{ARGV[2] || 0.5}];" h.each {|x| puts " \"%0#{N}d\" -> \"%0#{N}d\";" % x } puts "}"
$ ruby kaprekar.rb 2 0.5 0.4 > kaprekar2.dot $ twopi -Tpng kaprekar2.dot > kaprekar2.png