2020年10月20日火曜日

201020(2)

Crystal


A006950(2)

先程と同様にCrystal に書き換えてみた。

def a006950(n)
  return 1 if n < 3
  a = (1..n - 1).map{|i| [i]}
  ary = [[n]]
  while a.size != 0
    b = Array(Array(Int32)).new
    a.each{|i|
      x = i[-1].to_i
      s = n - i.sum
      t = x % 2
      (x + t..s - 1).each{|j| b << i.clone + [j]}
      ary << i.clone + [s] if s >= x + t
    }
    a = b
  end
  ary.size
end

p (0..90).map{|i| a006950(i)}

出力結果
[1, 1, 1, 2, 3, 4, 5, 7, 10, 13, 16, 21, 28, 35, 43, 55, 70, 86, 105, 130, 161, 196, 236, 287, 350, 420, 501, 602, 722, 858, 1016, 1206, 1431, 1687, 1981, 2331, 2741, 3206, 3740, 4368, 5096, 5922, 6868, 7967, 9233, 10670, 12306, 14193, 16357, 18803, 21581, 24766, 28394, 32490, 37128, 42411, 48406, 55159, 62777, 71416, 81182, 92152, 104494, 118434, 134131, 151725, 171467, 193676, 218607, 246491, 277691, 312677, 351841, 395537, 444314, 498852, 559727, 627509, 703002, 787171, 880896, 985043, 1100775, 1229494, 1372499, 1531086, 1706958, 1902121, 2118469, 2357947, 2623017]

0 件のコメント:

コメントを投稿

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