864197532(高速化)
150418(2)分を高速化してみた。
def takahashi_number(m)
numbers = (0..9).to_a
numbers.repeated_combination(m){|c_ary|
# 後述のnが9の倍数ということはc_aryの和も9の倍数
if c_ary.inject(:+) % 9 == 0
min_ary = c_ary.clone
max = min_ary.reverse.join.to_i
# 最高位を0以外にする←カプレカ数との違い
i = 0
while min_ary[i] == 0
i += 1
end
min_ary[0], min_ary[i] = min_ary[i], min_ary[0]
min = min_ary.join.to_i
n = max - min
p [m, c_ary, n] if c_ary == n.to_s.split('').map(&:to_i).sort
end
}
end
(2..9).each{|m| takahashi_number(m)}
出力結果
[3, [4, 5, 9], 495]
[4, [1, 4, 6, 7], 6174]
[6, [0, 2, 5, 6, 6, 8], 660852]
[6, [1, 3, 4, 6, 6, 7], 631764]
[6, [4, 4, 5, 5, 9, 9], 549945]
[8, [0, 2, 3, 5, 6, 6, 6, 8], 66308652]
[8, [1, 3, 3, 4, 6, 6, 6, 7], 63317664]
[9, [1, 2, 3, 4, 5, 6, 7, 8, 9], 864197532]
[9, [4, 4, 4, 5, 5, 5, 9, 9, 9], 554999445]
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。