2015年4月19日日曜日

150419

Ruby


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 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。