LoginSignup
7
2

More than 5 years have passed since last update.

パスカルの三角形とフラクタル

Posted at

はじめに

ruby初心者です。プログラミングの練習のために二項係数の計算をやっていたら、結構遊べるテーマだと思ったのでメモ代わりに書き残しておきます。

パスカルの三角形とは

パスカルの三角形 - Wikipedia

パスカルの三角形(パスカルのさんかくけい、英: Pascal's triangle)は、二項展開における係数を三角形状に並べたものである。
この三角形の作り方は単純なルールに基づいている。まず最上段に 1 を配置する。それより下の行はその位置の右上の数と左上の数の和を配置する。例えば、5段目の左から2番目には、左上の 1 と右上の 3 の合計である 4 が入る。このようにして数を並べると、上から n 段目、左から k 番目の数は、二項係数${}_ {n-1}C _{k-1}$に等しい。

Rubyで書いてみました

pascal_triangle.rb
#!/usr/bin/ruby

arr = [[1]]

for l in 1..10
    tmp = [1]
    for m in 1..(arr[l-1].length - 1)
        tmp.push(arr[l-1][m-1] + arr[l-1][m])
    end
    tmp.push(1)
    arr.push(tmp)
end

arr.each do |row|
    puts row.join("\t")
end

出力は次のようになります。左右対称のおもしろい数のパターンが見えると思います。

1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
1   5   10  10  5   1
1   6   15  20  15  6   1
1   7   21  35  35  21  7   1
1   8   28  56  70  56  28  8   1
1   9   36  84  126 126 84  36  9   1
1   10  45  120 210 252 210 120 45  10  1

パスカルの三角形に隠れるフラクタル

パスカルの三角形の各項を整数で割って、その余りを並べるとおもしろいパターンが見えてきます。先程のコードのarr.each以降を次のように書き換えてその姿をご覧に入れましょう。


arr.each do |row|
    row.map! do |elm|
        elm % 4
    end
    puts row.join("\t")
end
1
1   1
1   2   1
1   3   3   1
1   0   2   0   1
1   1   2   2   1   1
1   2   3   0   3   2   1
1   3   1   3   3   1   3   1
1   0   0   0   2   0   0   0   1
1   1   0   0   2   2   0   0   1   1
1   2   1   0   2   0   2   0   1   2   1

自然数を4で割った余り「1」「2」「3」「0」の分布を得ることができました。ただ、分かりにくいですから1、2、3、0の代わりに絵文字で色を付け、さらに計算をすすめてもっと広い分布を見てみましょう。

pascal_triangle_mod_4.rb
#!/usr/bin/ruby

arr = [[1]]

for l in 1..50
    tmp = [1]
    for m in 1..(arr[l-1].length - 1)
        tmp.push(arr[l-1][m-1] + arr[l-1][m])
    end
    tmp.push(1)
    arr.push(tmp)
end


arr.each do |row|
    row.map! do |elm|
        elm = (elm % 4).to_s.gsub("0", "🍈").gsub("1", "🍎").gsub("2", "🍇").gsub("3", "🍊")
    end
    puts row.join("")
end
🍎
🍎🍎
🍎🍇🍎
🍎🍊🍊🍎
🍎🍈🍇🍈🍎
🍎🍎🍇🍇🍎🍎
🍎🍇🍊🍈🍊🍇🍎
🍎🍊🍎🍊🍊🍎🍊🍎
🍎🍈🍈🍈🍇🍈🍈🍈🍎
🍎🍎🍈🍈🍇🍇🍈🍈🍎🍎
🍎🍇🍎🍈🍇🍈🍇🍈🍎🍇🍎
🍎🍊🍊🍎🍇🍇🍇🍇🍎🍊🍊🍎
🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎
🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎
🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎
🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎
🍎🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍎
🍎🍎🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍎🍎
🍎🍇🍎🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍎🍇🍎
🍎🍊🍊🍎🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍎🍊🍊🍎
🍎🍈🍇🍈🍎🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍎🍈🍇🍈🍎
🍎🍎🍇🍇🍎🍎🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍎🍎🍇🍇🍎🍎
🍎🍇🍊🍈🍊🍇🍎🍈🍇🍈🍇🍈🍇🍈🍇🍈🍎🍇🍊🍈🍊🍇🍎
🍎🍊🍎🍊🍊🍎🍊🍎🍇🍇🍇🍇🍇🍇🍇🍇🍎🍊🍎🍊🍊🍎🍊🍎
🍎🍈🍈🍈🍇🍈🍈🍈🍊🍈🍈🍈🍈🍈🍈🍈🍊🍈🍈🍈🍇🍈🍈🍈🍎
🍎🍎🍈🍈🍇🍇🍈🍈🍊🍊🍈🍈🍈🍈🍈🍈🍊🍊🍈🍈🍇🍇🍈🍈🍎🍎
🍎🍇🍎🍈🍇🍈🍇🍈🍊🍇🍊🍈🍈🍈🍈🍈🍊🍇🍊🍈🍇🍈🍇🍈🍎🍇🍎
🍎🍊🍊🍎🍇🍇🍇🍇🍊🍎🍎🍊🍈🍈🍈🍈🍊🍎🍎🍊🍇🍇🍇🍇🍎🍊🍊🍎
🍎🍈🍇🍈🍊🍈🍈🍈🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎🍈🍈🍈🍊🍈🍇🍈🍎
🍎🍎🍇🍇🍊🍊🍈🍈🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎🍈🍈🍊🍊🍇🍇🍎🍎
🍎🍇🍊🍈🍎🍇🍊🍈🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎🍈🍊🍇🍎🍈🍊🍇🍎
🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎
🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎
🍎🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍎
🍎🍇🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍇🍎
🍎🍊🍊🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍊🍊🍎
🍎🍈🍇🍈🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍈🍇🍈🍎
🍎🍎🍇🍇🍎🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍎🍇🍇🍎🍎
🍎🍇🍊🍈🍊🍇🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍇🍈🍇🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍇🍊🍈🍊🍇🍎
🍎🍊🍎🍊🍊🍎🍊🍎🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍇🍇🍇🍇🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍎🍊🍎🍊🍊🍎🍊🍎
🍎🍈🍈🍈🍇🍈🍈🍈🍎🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍎🍈🍈🍈🍇🍈🍈🍈🍎
🍎🍎🍈🍈🍇🍇🍈🍈🍎🍎🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍎🍎🍈🍈🍇🍇🍈🍈🍎🍎
🍎🍇🍎🍈🍇🍈🍇🍈🍎🍇🍎🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍎🍇🍎🍈🍇🍈🍇🍈🍎🍇🍎
🍎🍊🍊🍎🍇🍇🍇🍇🍎🍊🍊🍎🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍎🍊🍊🍎🍇🍇🍇🍇🍎🍊🍊🍎
🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎
🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎
🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎
🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎
🍎🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍊🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍊🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍎
🍎🍎🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍊🍊🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍊🍊🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍎🍎
🍎🍇🍎🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍊🍇🍊🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍊🍇🍊🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍎🍇🍎

(画面幅によってはきれいに表示されないかも…)

このように部分が全体に等しい(類似している)ような性質を持った図形のことを「フラクタル図形」といいます。日本語では「自己相似形」といいますが、上の図形をよく観察すると互いに相似なパターンが大きさを変え何度も出現していることがわかります。

今回はパスカルの三角形を4で割ったときの余りで考えましたが、他の数でやってみてもおもしろいパターンを得ることができます。

参考

シェルピンスキーのギャスケット - Wikipedia

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2