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

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

# パスカルの三角形とは
[パスカルの三角形 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B9%E3%82%AB%E3%83%AB%E3%81%AE%E4%B8%89%E8%A7%92%E5%BD%A2)
>パスカルの三角形（パスカルのさんかくけい、英: Pascal's triangle）は、二項展開における係数を三角形状に並べたものである。
>この三角形の作り方は単純なルールに基づいている。まず最上段に 1 を配置する。それより下の行はその位置の右上の数と左上の数の和を配置する。例えば、5段目の左から2番目には、左上の 1 と右上の 3 の合計である 4 が入る。このようにして数を並べると、上から n 段目、左から k 番目の数は、二項係数${}_ {n-1}C _{k-1}$に等しい。

# Rubyで書いてみました
```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`以降を次のように書き換えてその姿をご覧に入れましょう。

```ruby

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
```

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

```ruby: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
```

```
🍎
🍎🍎
🍎🍇🍎
🍎🍊🍊🍎
🍎🍈🍇🍈🍎
🍎🍎🍇🍇🍎🍎
🍎🍇🍊🍈🍊🍇🍎
🍎🍊🍎🍊🍊🍎🍊🍎
🍎🍈🍈🍈🍇🍈🍈🍈🍎
🍎🍎🍈🍈🍇🍇🍈🍈🍎🍎
🍎🍇🍎🍈🍇🍈🍇🍈🍎🍇🍎
🍎🍊🍊🍎🍇🍇🍇🍇🍎🍊🍊🍎
🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎
🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎
🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎
🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎
🍎🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍎
🍎🍎🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍎🍎
🍎🍇🍎🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍎🍇🍎
🍎🍊🍊🍎🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍎🍊🍊🍎
🍎🍈🍇🍈🍎🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍎🍈🍇🍈🍎
🍎🍎🍇🍇🍎🍎🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍎🍎🍇🍇🍎🍎
🍎🍇🍊🍈🍊🍇🍎🍈🍇🍈🍇🍈🍇🍈🍇🍈🍎🍇🍊🍈🍊🍇🍎
🍎🍊🍎🍊🍊🍎🍊🍎🍇🍇🍇🍇🍇🍇🍇🍇🍎🍊🍎🍊🍊🍎🍊🍎
🍎🍈🍈🍈🍇🍈🍈🍈🍊🍈🍈🍈🍈🍈🍈🍈🍊🍈🍈🍈🍇🍈🍈🍈🍎
🍎🍎🍈🍈🍇🍇🍈🍈🍊🍊🍈🍈🍈🍈🍈🍈🍊🍊🍈🍈🍇🍇🍈🍈🍎🍎
🍎🍇🍎🍈🍇🍈🍇🍈🍊🍇🍊🍈🍈🍈🍈🍈🍊🍇🍊🍈🍇🍈🍇🍈🍎🍇🍎
🍎🍊🍊🍎🍇🍇🍇🍇🍊🍎🍎🍊🍈🍈🍈🍈🍊🍎🍎🍊🍇🍇🍇🍇🍎🍊🍊🍎
🍎🍈🍇🍈🍊🍈🍈🍈🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎🍈🍈🍈🍊🍈🍇🍈🍎
🍎🍎🍇🍇🍊🍊🍈🍈🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎🍈🍈🍊🍊🍇🍇🍎🍎
🍎🍇🍊🍈🍎🍇🍊🍈🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎🍈🍊🍇🍎🍈🍊🍇🍎
🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎🍊🍎
🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎
🍎🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍎
🍎🍇🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍇🍎
🍎🍊🍊🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍊🍊🍎
🍎🍈🍇🍈🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍈🍇🍈🍎
🍎🍎🍇🍇🍎🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍎🍇🍇🍎🍎
🍎🍇🍊🍈🍊🍇🍎🍈🍈🍈🍈🍈🍈🍈🍈🍈🍇🍈🍇🍈🍇🍈🍇🍈🍈🍈🍈🍈🍈🍈🍈🍈🍎🍇🍊🍈🍊🍇🍎
🍎🍊🍎🍊🍊🍎🍊🍎🍈🍈🍈🍈🍈🍈🍈🍈🍇🍇🍇🍇🍇🍇🍇🍇🍈🍈🍈🍈🍈🍈🍈🍈🍎🍊🍎🍊🍊🍎🍊🍎
🍎🍈🍈🍈🍇🍈🍈🍈🍎🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍎🍈🍈🍈🍇🍈🍈🍈🍎
🍎🍎🍈🍈🍇🍇🍈🍈🍎🍎🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍎🍎🍈🍈🍇🍇🍈🍈🍎🍎
🍎🍇🍎🍈🍇🍈🍇🍈🍎🍇🍎🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍎🍇🍎🍈🍇🍈🍇🍈🍎🍇🍎
🍎🍊🍊🍎🍇🍇🍇🍇🍎🍊🍊🍎🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍇🍇🍇🍇🍈🍈🍈🍈🍎🍊🍊🍎🍇🍇🍇🍇🍎🍊🍊🍎
🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍇🍈🍈🍈🍎🍈🍇🍈🍊🍈🍈🍈🍊🍈🍇🍈🍎
🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍇🍇🍈🍈🍎🍎🍇🍇🍊🍊🍈🍈🍊🍊🍇🍇🍎🍎
🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍇🍈🍎🍇🍊🍈🍎🍇🍊🍈🍊🍇🍎🍈🍊🍇🍎
🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍎🍊🍎🍊🍎🍊🍎🍊🍊🍎🍊🍎🍊🍎🍊🍎
🍎🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍊🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍊🍈🍈🍈🍈🍈🍈🍈🍇🍈🍈🍈🍈🍈🍈🍈🍎
🍎🍎🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍊🍊🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍊🍊🍈🍈🍈🍈🍈🍈🍇🍇🍈🍈🍈🍈🍈🍈🍎🍎
🍎🍇🍎🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍊🍇🍊🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍈🍊🍇🍊🍈🍈🍈🍈🍈🍇🍈🍇🍈🍈🍈🍈🍈🍎🍇🍎

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

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


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

# 参考
[シェルピンスキーのギャスケット - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%94%E3%83%B3%E3%82%B9%E3%82%AD%E3%83%BC%E3%81%AE%E3%82%AE%E3%83%A3%E3%82%B9%E3%82%B1%E3%83%83%E3%83%88)