Pythonで遊んだ
昨日 id:cooldaemon さん含む数人でカフェに行って話していて、
の話になりました。
で、これって初期値を 1974 以外の値にしたらちゃんと収束するんだろうか?
ということで 1234 とか 7192 とか入れてみたのですが、同じ 6174 になりました。
他にもいろいろ値を入れてみたのですが、やはり 6174 になる。
ただ、1111 とかだと 0 になります。これはまあ当然ですね。
じゃあ一体どの値が 6174 にならない値なのか、ということで、0〜9999までの値を全部試してみました。
def f(n, prev = None, count = 0): if prev is not None and prev == n: return (n, count - 1) s = sorted("%04d" % n) x = int("".join(s[::-1])) - int("".join(s)) return f(x, n, count + 1) xs = [(n, f(n)) for n in xrange(10000)] print [x for x in xs if x[1][0] != 6174] m = max([x[1][1] for x in xs]) print 7 print len([x for x in xs if x[1][1] == m])
[(0, (0, 0)), (1111, (0, 1)), (2222, (0, 1)), (3333, (0, 1)), (4444, (0, 1)), (5555, (0, 1)), (6666, (0, 1)), (7777, (0, 1)), (8888, (0, 1)), (9999, (0, 1))] 7 2184
連番以外は全部 6174 になるようです。ふしぎふしぎ。
で、ついでに何回で収束するのかというのも試してみたところ、7回で収束するのが最大で、7回で収束する値は 2184 個あるようです。
とまあ、こんなことをして遊んでいました、と。