【Ruby】【アルゴリズム】ハノイの塔 /モンテカルロ法
ハノイの塔
こんなにシンプルに書けるのね!
def hanoi(n, start, goal, tmp) return if n == 0 hanoi(n-1, start, tmp, goal) p "move #{n} to #{goal}" hanoi(n-1, tmp, goal, start) end hanoi(3, "A", "B", "C")
ビット演算の練習を兼ねて、グレイコードを使った解答を考える。
モンテカルロ法
プログラマーは今こそアルゴリズムを書くべき!!~モンテカルロ法でπを計算してみよう(コードあり)~ - nigoblogを参考に。
モンテカルロ法で円周率を計算する。
写経するのは悔しかったので、
長さ1の正方形内に、半径0.5の円が入っているとイメージして実装しました。
ポイント
- to_fメソッドをつけるタイミング(割り算実行前だよ!)
def pai(chance) count = 0 chance.times do x = rand; y = rand count += 1 if Math::sqrt((x-0.5)*(x-0.5) + (y-0.5)*(y-0.5)) < 0.5 end answer = (4*count.to_f/chance) end p pai(10000)
rand
って書くだけでランダムな数値が参照できるんだ!
知らなかった。
Kernelモジュールにrandメソッドが定義されているからか。
self.rand か。 Rubyぽい。
いってきますー。