2016年7月22日金曜日

160722(3)

Ruby


An 型フリーズパターンと多角形の三角形分割(1)

http://www.math.tohoku.ac.jp/~kuroki/LaTeX/20120810FriezePattern.pdf
において、n + 3 角形の三角形分割からAn 型のフリーズパターンを構成している。
このことを逆に利用すれば、
n + 3 角形の三角形分割に対し、数字の割り振りを一回行っておけば、
An 型のフリーズパターンを構成することで、他の数字の割り振りが求められる。

def A0(ary, n)
  m = ary.size
  a_ary = [ary]
  p a_ary[0]
  n.times{|i|
    a_ary << Array.new(m, 1)
    (m - 2).downto(1){|j| a_ary[i + 1][j] = (a_ary[i][j - 1] * a_ary[i + 1][j + 1] + 1) / a_ary[i][j]}
    p a_ary[i + 1]
  }
end

def f(ary, n)
  m = ary.size
  a_ary = [ary]
  p [0] + a_ary[0]
  n.times{|i|
    a_ary << Array.new(m, 1)
    (m - 2).downto(1){|j| a_ary[i + 1][j] = (a_ary[i][j - 1] * a_ary[i + 1][j + 1] + 1) / a_ary[i][j]}
    p ([0] + a_ary[i + 1]).rotate(i + 1)
  }
end

A0([1, 1, 1, 2, 1], 6)
p ''
A0([1, 1, 1, 3, 2, 1], 7)
p ''
f([1, 1, 1, 2, 1], 6)
p ''
f([1, 1, 1, 3, 2, 1], 7)

出力結果
[1, 1, 1, 2, 1]
[1, 3, 2, 1, 1]
[1, 2, 5, 3, 1]
[1, 1, 1, 2, 1]
[1, 3, 2, 1, 1]
[1, 2, 5, 3, 1]
[1, 1, 1, 2, 1]
""
[1, 1, 1, 3, 2, 1]
[1, 3, 2, 1, 2, 1]
[1, 2, 5, 3, 1, 1]
[1, 2, 3, 7, 4, 1]
[1, 1, 1, 1, 2, 1]
[1, 4, 3, 2, 1, 1]
[1, 2, 7, 5, 3, 1]
[1, 1, 1, 3, 2, 1]
""
[0, 1, 1, 1, 2, 1]
[1, 3, 2, 1, 1, 0]
[2, 5, 3, 1, 0, 1]
[1, 2, 1, 0, 1, 1]
[1, 1, 0, 1, 3, 2]
[1, 0, 1, 2, 5, 3]
[0, 1, 1, 1, 2, 1]
""
[0, 1, 1, 1, 3, 2, 1]
[1, 3, 2, 1, 2, 1, 0]
[2, 5, 3, 1, 1, 0, 1]
[3, 7, 4, 1, 0, 1, 2]
[1, 2, 1, 0, 1, 1, 1]
[1, 1, 0, 1, 4, 3, 2]
[1, 0, 1, 2, 7, 5, 3]
[0, 1, 1, 1, 3, 2, 1]

0 件のコメント:

コメントを投稿