奥村晴彦さんの「C言語による最新アルゴリズム事典」技術評論社、1991年、の C 言語プログラムの Ruby への翻訳に挑戦します。プログラムの説明は同書を読んでください。変換はできるだけ逐語的に行っています。プログラムの動作は原作の C プログラムのそれと比較してチェックしていますが、うまく動作しないときは C から Ruby への変換のさいに起きたものです。バグレポートは tnomura@mnet.ne.jp までお願いします。
この Ruby 翻訳版はできるだけレイアウトも含めて原作の C プログラムを変更しないようにしたため、必ずしもRuby らしいコーディングスタイルとは言えないかもしれませんが、プログラムがきちんと動作することを優先しました。C から Ruby への翻訳の著作権に関しては Ruby のライセンスに準じます。配布、改変は自由です。ただし、プログラム本体には原作者の著作権があるものと考えます。
| 105.rb | 百五減算 |
| 3dgraph.rb | 3次元グラフ |
| 5num.rb | 五数要約 (実行には statutil.rb が必要です。) |
| acker.rb | Ackermann (アッカーマン)関数 |
| area.rb | 面積 |
| atan.rb | 逆三角関数 |
| bernoull.rb | Bernoulli (ベルヌーイ) 数 |
| bessel.rb | Bessel (ベッセル) 関数 |
| bifur.rb | カオスとアトラクタ (実行には window.rb が必要です。) |
| binomial.rb | 2項分布 |
| bsrch.rb | 2分探索 |
| bubsort.rb | バブルソート |
| cannibal.rb | 宣教師と人食い人 |
| cardano.rb | 三次方程式。Ruby 1.6 では Math.acos がないので動きません。Ruby 1.8 なら OK。 |
| ccurve.rb | C曲線 |
| cfint.rb | 連分数補間 |
| change.rb | 小銭の払い方 |
| chaos.rb | カオスとアトラクタ |
| chaos_g.rb | カオスとアトラクタ(gnuplot で表示を行うバージョン) |
| chi2.rb | カイ2乗分布 |
| collatz.rb | Collatz (コラッツ) の予想 |
| combinat.rb | 組合せの数 |
| contour.rb | 等高線(f(x,y) = 1, x = 1, y = 1, step = .1 くらいからはじめてください。実行には plotter.rb が必要です。) |
| complex_algo.rb | Ruby には標準ライブラリの complex.rb があるのでファイル名には complex_algo.rb を使いました。演算子のオーバーライドなどちょっぴり Ruby 風にしてありますが、基本的なアルゴリズムは原作のままです。 |
| corrcoef.rb | 相関係数 (実行には statutil.rb が必要です) |
| crypt.rb | 暗合 |
| dayweek.rb | 曜日 |
| delta2.rb | Aitken (エイトケン) の Delta^2 法 |
| dijkstra.dat | dijkstra.rb 用のデータファイル。ruby dijkstra.rb < dijkstra.dat で実行します。 |
| dijkstra.rb | 最短路問題 |
| distsort.rb | 分布数えソート |
| dragon.rb | ドラゴンカーブ (実行には plotter.rb が必要です。) |
| dragon2.rb | ドラゴンカーブ (実行には plotter.rb が必要です。) |
| e.rb | 自然対数の底 |
| egypfrac.rb | エジプトの分数 |
| eigen.rb | QR法 (実行には matutil.rb が必要です) |
| euler.rb | 一筆書き |
| eval.rb | 式の評価 |
| factoriz.rb | 素因数分解 |
| factrep.rb | 階乗進法 |
| fib.rb | Fibonacci (フィボナッチ) 数列 |
| fibonacc.rb | Fibonacci (フィボナッチ) 探索 |
| fracint.rb | フラクタル補間 |
| gamma.rb | ガンマ関数、ベータ関数 |
| gauss.rb | Gauss (ガウス) 法 (実行には matutil.rb が必要です) |
| gcd.rb | 最大公約数 |
| genperm.rb | 順列生成 |
| gjmatinv.rb | 逆行列 (実行には matutil.rb が必要です) |
| goldsect.rb | 黄金分割 |
| hanoi.rb | ハノイの塔 |
| heapsort.rb | ヒープソート |
| hilbert.rb | Hilbert (ヒルベルト) 曲線 |
| hyperb.rb | 双曲線関数・逆双曲線関数 |
| ifs.rb | フラクタルによる画像圧縮 (実行には window.rb が必要です。) |
| ifs_tree1.rb | フラクタルによる画像圧縮 (樹木) |
| ifs_tree2.rb | フラクタルによる画像圧縮 (樹木) |
| ifs_tri.rb | フラクタルによる画像圧縮 (Sierpinski の三角形) |
| inssort.rb | 挿入ソート |
| inv.rb | 合同式 |
| invr.rb | 逆行列 (実行には matutil.rb が必要です。) |
| irandom.rb | 幾何分布、二項分布、Poisson (ポアソン) 分布 |
| isbn.rb | ISBN番号 |
| ishi1.rb | 石取りゲーム 1 |
| ishi2.rb | 石取りゲーム 2 |
| isomer.rb | 異性体の問題 |
| jos1.rb | Josephus (ヨセフス) の問題 |
| jos2.rb | Josephus (ヨセフス) の問題 |
| knapsack.rb | ナップザックの問題 |
| knight.rb | 騎士巡歴の問題 |
| koch.rb | Koh (コッホ) 曲線 |
| komachi.rb | 小町算 |
| krnd.rb | Knuthの乱数発生法 |
| life.rb | ライフ・ゲーム |
| lissaj.rb | Lissajous (リサージュ) 図形 |
| lorenz.rb | Lorenz (ローレンツ) アトラクタ |
| lucas.rb | 素数のLucasテスト |
| maceps.rb | 機械エプシロン |
| magicsq.rb | 魔方陣 |
| mapsort.rb | 逆写像ソート |
| marriage.rb | 安定な結婚の問題 |
| matinv.rb | 逆行列 (実行には matutil.rb が必要です) |
| matutil.rb | 行列操作の小道具集 |
| maxmin.rb | 最大値・最小値 |
| maze.rb | 迷路 |
| monte.rb | モンテカルロ法 |
| movebloc.rb | ブロック移動 |
| newt1.rb | Newton (ニュートン) 法 |
| newt2.rb | Newton (ニュートン) 法 |
| newton.rb | Newton (ニュートン) 法 |
| nextperm.rb | 順列 |
| nim.rb | 三山くずし |
| normal.rb | 正規分布 |
| numint.rb | 数値積分 |
| orddif.rb | 常微分方程式 |
| partit.rb | 分割数 |
| permfac.rb | 順列(階乗進法との相互変換) |
| permnum.rb | 順列(自然数との相互変換) |
| permsign.rb | 置換の符号 |
| pi1.rb | 円周率 |
| pi2.rb | 円周率 |
| plotter.rb | グラフィックス。 gnuplot がインストールされている必要があります。グラフィックを扱うプログラムは gnuplot を利用しています。 |
| postfix.rb | 後置記法 |
| primes.rb | 素数 |
| primroot.rb | 原始根 |
| qsort1.rb | クイックソート |
| quadeq.rb | 2次方程式 |
| radconv.rb | 基数の変換 |
| random.rb | 確率分布 |
| rank1.rb | 順位づけ |
| rank2.rb | 順位づけ |
| repdec.rb | 小数の循環節 |
| rndsamp1.rb | 無作為抽出 |
| rndsamp2.rb | 無作為抽出 |
| rndsamp3.rb | 無作為抽出 |
| sboymoo.rb | Boyer--Moore法 |
| select.rb | 選択 |
| seqsrch.rb | 逐次探索 |
| shelsort.rb | Shellソート |
| slctsort.rb | 選択ソート |
| sosrch.rb | 自己組織化探索 |
| spline.rb | スプライン補間 |
| sqrt.rb | 平方根。Ruby の Float クラスは double のようです。Ruby で long double を扱う方法が分からなかったのでこの翻訳版では long double の出力が C 言語プログラムとは異なりますが、一応直訳したものを置いておきます。 |
| srchmat.rb | 2次元の探索 |
| statutil.rb | 多変量データ。(データ入力用のプログラム。他のプログラムから引用します。) |
| stemleaf.rb | 幹葉表示 |
| strmatch.rb | 文字列照合。Ruby の String オブジェクトでは終端文字はなく、範囲外の照会をすると nil が返るようになっています。 |
| sum.rb | 情報落ち(Ruby では桁落ちが検証できませんでした。) |
| tarai.rb | たらいまわし関数 |
| tetromin.rb | テトロミノの箱詰パズル |
| toposort.rb | トポロジカル・ソーティング。ruby toposort.rb < toposort.datで実行します。 |
| toposort.dat | トポロジカル・ソーティングのデータファイル |
| tree.rb | 2分探索木 (原作はポインタのポインタを使ったコンパクトなコードになっています。Rubyではポインタがなく eval を使ってポインタらしき動作をさせたので実用的ではないかも知れません。しかし、原作の C プログラムと対比させるとそのアイディアがよく分かります。) |
| treecurv.rb | 樹木曲線。実行するには plotter.rb が必要です。 |
| warshall.dat | warshal.rb用のデータファイル。ruby warshal.rb < warshal.dat で実行します。 |
| warshall.rb | 推移的閉包 |
| water.rb | 水をはかる問題 |
| weights.rb | 秤の問題 |
| window.rb | グラフィックス・ルーチン。gnuplot がインストールされている必要があります。 |
| zeta.rb | Riemannのゼータ関数 |