2015年9月22日火曜日

150922

Ruby


Ulam spiral

素数を塗りつぶす場合、p角数を塗りつぶす場合両方に対応。

# -*- coding: cp932 -*-

require 'prime'

# mはp角数か?
def p_number?(p, m)
  i = 0
  a = ((p - 2) * i - p + 4) * i / 2
  while a < m
    i += 1
    a = ((p - 2) * i - p + 4) * i / 2
  end
  a == m
end

# (x, y)に埋まる数字を算出
def cell(n, x, y, start = 1)
  y, x = y - n / 2, x - (n - 1) / 2
  l = 2 * [x.abs, y.abs].max
  if y >= x
    d = l * 3 + x + y
  else 
    d = l - x - y
  end
  (l - 1) * (l - 1) + d + start - 1
end

# condition = 0 のとき素数を、それ以外のときcondition角数を塗りつぶす
def show_spiral(condition, n, symbol, start = 1)
  puts "\nN : #{condition} : #{n}"
  n.times{|y|
    n.times{|x|
      m = cell(n, x, y, start)
      if condition == 0
        print m.prime? ? symbol[0] : symbol[1]
      else
        print p_number?(condition, m) ? symbol[0] : symbol[1]
      end
    }
    puts
  }
end

show_spiral(0, 40, "■□")
show_spiral(3, 40, "■□")
show_spiral(4, 40, "■□")
show_spiral(5, 40, "■□")
show_spiral(6, 40, "■□")

出力結果(実際より縦長になっていますが、コピペしてメモ帳に貼り付けるときれいな図になります。)

N : 0 : 40
□□□■□□□□□□□□□□□□□■□□□■□□□□□□□■□□□■□□□□□□
□□□□□□■□□□□□■□□□■□■□□□■□□□□□□□□□□□□□■□□□
□■□□□□□■□■□□□□□■□□□■□■□□□□□□□□□□□□□□□□□■
■□□□□□■□■□□□□□□□□□□□□□□□□□□□□□■□□□□□■□□□
□□□□□□□■□■□□□□□■□□□■□□□□□□□□□□□■□□□□□■□□
□□□□□□□□□□□□□□□□□□■□□□■□■□□□■□□□□□□□□□□□
□■□□□□□□□□□□□□□□□■□□□■□□□□□□□■□□□■□■□□□□
■□□□□□■□□□■□□□□□□□□□□□■□■□□□□□■□□□□□□□□□
□■□□□■□■□□□□□■□■□□□□□■□□□□□■□□□□□□□□□□□■
■□■□□□□□□□□□□□■□□□□□□□□□□□■□□□■□□□□□■□■□
□□□■□□□□□■□□□■□□□□□□□■□□□□□■□□□□□□□□□□□□
□□□□■□□□■□□□□□□□□□■□□□■□■□□□■□■□■□□□□□□□
□■□■□□□□□□□■□□□□□■□□□□□□□□□■□■□□□■□□□□□■
□□□□□□■□□□□□■□□□■□■□□□□□□□□□□□□□□□■□□□□□
□□□□□□□□□□□□□□□□□□□■□■□□□□□■□□□■□□□■□■□□
■□□□■□□□■□□□■□■□□□■□□□□□□□■□□□■□■□□□□□□□
□□□□□□□□□□□□□□□□□□□■□■□□□■□□□□□□□□□□□□□□
□□■□□□□□□□■□□□■□■□□□□□■□■□■□□□□□■□■□■□□□
□□□■□■□■□■□■□■□■□■□□□■□□□□□□□■□□□□□□□□□■
□□□□□□□□□□□□□□□□□□■□■□■□□□□□□□□□□□■□□□□□
□□□□□□□□□□□□□■□□□■□□■■□■□■□■□□□■□■□■□□□□
□□□□□□■□□□□□□□■□■□■□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□■□□□■□□□□□□□□□□□□□□□□□□□□
□□□□■□□□■□■□□□■□■□□□■□□□■□■□□□■□□□■□■□□□
□■□□□□□■□□□■□□□■□□□□□■□□□□□■□■□□□■□□□□□□
□□□□□□□□□□□□□□□□■□□□□□□□□□□□■□□□□□□□□□□□
□■□□□□□□□□□■□■□□□□□■□□□■□□□■□□□□□□□■□■□□
■□■□□□□□■□□□■□□□□□□□□□□□■□□□□□□□■□□□□□■□
□□□■□□□□□■□□□□□■□□□■□■□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□■□■□□□■□□□□□■□□□■□□□□□■□□□
□□□■□■□■□■□□□□□□□□□■□■□□□□□■□□□□□■□■□□□■
□□□□□□■□□□■□□□□□□□□□□□■□■□□□□□□□□□□□□□□□
□■□□□■□■□□□□□■□□□□□■□□□■□■□□□□□□□□□□□■□□
□□■□■□□□□□□□■□□□□□□□□□■□□□□□□□■□□□□□■□□□
□□□□□□□□□□□□□■□■□□□■□■□□□□□□□□□■□□□□□■□□
□□□□□□□□□□■□□□■□□□□□■□□□□□■□□□□□□□□□■□■□
□□□□□□□■□■□□□□□■□□□□□□□□□□□□□□□□□■□□□□□□
■□□□■□□□□□□□■□□□□□□□□□□□■□□□■□□□□□■□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□■□□□■
■□□□■□■□□□■□□□□□■□□□□□□□□□□□■□□□□□□□□□□□

N : 3 : 40
□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□■□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□■□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□■□□□□□□□□□□
□□□■□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□
□□□□□□□□□■□□□□□□□□□□□□□□■□□□□□□□□□■□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□■□■□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□■□□□□■□□□□□□□□□□□
□□□□□□□□□□□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□
□□□□□□□□■□□□□□□□□□■■□□■□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□■
□□■□□□□□□□□□□■□□□■□□□□□□□□□■□□□□□■□□□□□□
□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□■□□□□□□□□□□□□□
□□□□□□□■□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□■□□□□□□□
□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□■□
□■□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

N : 4 : 40
■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□

N : 5 : 40
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□
□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□■□□□□□□□□□□
□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□■□□
□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□■□□■□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□■□□□□□□□□□□□□□
□□□□□□□■□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□■□□□□■□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□
□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□
□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□
□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□

N : 6 : 40
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□■□□□□□□□□□□
□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□■□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□■□□□□□□□□□■■□□■□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■
□□□□□□□□□□□□□■□□□□□□□□□□□□□■□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□■□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□
□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

0 件のコメント:

コメントを投稿

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