2015年11月22日日曜日

151122(3)

Ruby


直角二等辺三角形の形をした領域内のSelf-avoiding walk(4)

move1のときの規則性は偶然(?)
オンライン整数列大辞典の
A208058(http://oeis.org/A208058/list)
と一致している。
このことを確認するとともに、その和が
A054091(http://oeis.org/A054091/list)
と一致することも確認しておく。

=begin
move1 = [[1, 0], [-1, 0], [0, 1]]
move2 = [[1, 0], [0, 1], [0, -1]]
=end

# move2のとき規則性は簡単
def search_move2(n)
  ary = [1, n - 1, (n - 2) * (n - 2)]
  if n > 3
    n0 = (1..n - 2).inject(:*)
    ary += (1..n - 4).map{|i| n0 * (i + 1) / (1..i).inject(:*)}.reverse + [n0]
  end
  ary[0..n - 1]
end

# move1のときも規則性は簡単
def search_move1(n)
  search_move2(n).reverse
end

# 0~nまで
def f(n)
  ary = []
  i = 1
  while ary.size < n + 1
    ary += search_move1(i)
    i += 1
  end
  ary[0..n]
end

# 0~nまで
def g(n)
  (1..n + 1).map{|i| search_move1(i).inject(:+)}
end

ary = f(54)
# OEIS A208058のデータ
ary0 =
[1,1,1,1,2,1,2,4,3,1,6,12,9,4,1,24,48,36,16,5,1,
 120,240,180,80,25,6,1,720,1440,1080,480,150,36,7,
 1,5040,10080,7560,3360,1050,252,49,8,1,40320,
 80640,60480,26880,8400,2016,392,64,9,1]
# 一致の確認
p ary == ary0

ary = g(21)
# OEIS A054091のデータ
ary0 =
[1,2,4,10,32,130,652,3914,27400,219202,1972820,
 19728202,217010224,2604122690,33853594972,
 473950329610,7109254944152,113748079106434,
 1933717344809380,34806912206568842,
 661331331924808000,13226626638496160002]
# 一致の確認
p ary == ary0

出力結果
true
true

0 件のコメント:

コメントを投稿

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