2015年3月29日日曜日

150329(4)

Ruby


Connell Sequence

まずは素直にコードを書いてみた。
オンライン整数列大辞典の
A001614(http://oeis.org/A001614/list)
と比較し、答え合わせしてみる。

M = 122
ary = []
m, n = 0, 1
while m < M
  m += 1
  ary << m
  (1..n - 1).each{|i|
    m += 2
    ary << m if m <= M
  }
  n += 1
end

# OEIS A001614のデータ
ary0 =
[1,2,4,5,7,9,10,12,14,16,17,19,21,23,25,26,28,30,
 32,34,36,37,39,41,43,45,47,49,50,52,54,56,58,60,
 62,64,65,67,69,71,73,75,77,79,81,82,84,86,88,90,
 92,94,96,98,100,101,103,105,107,109,111,113,115,
 117,119,121,122]
# 一致の確認
p ary == ary0

一般項を利用してコードを書いてみた。

M = 122
ary = []
i, m = 0, 0
while m < M
  i += 1
  m = 2 * i - ((1 + Math.sqrt(8 * i - 7)) / 2.0).to_i
  ary << m if m <= M
end

# OEIS A001614のデータ
ary0 =
[1,2,4,5,7,9,10,12,14,16,17,19,21,23,25,26,28,30,
 32,34,36,37,39,41,43,45,47,49,50,52,54,56,58,60,
 62,64,65,67,69,71,73,75,77,79,81,82,84,86,88,90,
 92,94,96,98,100,101,103,105,107,109,111,113,115,
 117,119,121,122]
# 一致の確認
p ary == ary0

0 件のコメント:

コメントを投稿

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