2016年1月1日金曜日

160101

Ruby


Riffle Shuffle

オンライン整数列大辞典の
A002326(http://oeis.org/A002326/list)
と比較し、答え合わせしてみる。

def riffle_shuffle(ary)
  n = ary.size / 2
  (0..n - 1).inject([]){|s, i| s += [ary[i], ary[i + n]]}
end

# 0から2n + 1までのカードをシャッフルして元に戻るまでの回数
def s(n)
  ary0 = (0..2 * n + 1).to_a
  ary = riffle_shuffle(ary0)
  i = 1
  while ary != ary0
    ary = riffle_shuffle(ary)
    i += 1
  end
  i
end

def A002326(n)
  (0..n).map{|i| s(i)}
end
ary = A002326(72)

# OEIS A002326のデータ
ary0 =
[1,2,4,3,6,10,12,4,8,18,6,11,20,18,28,5,10,12,36,
 12,20,14,12,23,21,8,52,20,18,58,60,6,12,66,22,35,
 9,20,30,39,54,82,8,28,11,12,10,36,48,30,100,51,12,
 106,36,36,28,44,12,24,110,20,100,7,14,130,18,36,
 68,138,46,60,28]
# 一致の確認
p ary == ary0

0 件のコメント:

コメントを投稿

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