SystemStackError: stack level too deep from sod.rb:6:in `sod' from sod.rb:9:in `sod' ...のようなエラーが出ると思いますが,関数 sod が再帰的に定義されていて,実行時に呼び出しの深さが深くなりすぎると(この場合では10万位),このようなエラーが出てしまいます. 関数sodを繰り返しで書き直したり,別の方法で素数かどうかを判定するようにすれば,もっと大きいnについても計算できるようになります.
def prime(n) 1 == sod(n, n - 1) end以下のように書くのは冗長.
def prime(n) if sod(n, n - 1) == 1 true else false end end「prime(1) は true でも構わない」と問題文に書いてあるが,
def prime(n) n + 1 == sod(n, n) endと書いて,prime(1) を false になるように書いている人もいた.
def combination(n,k) if k > n 0 else if k == 0 1 else combination(n - 1, k - 1) + combination(n - 1, k) end end end前回もあったが,elsif を使って以下のように書いた解答もあった.
def combination(n,k) if k>n 0 elsif k==0 1 else combination(n-1,k-1)+combination(n-1,k) end end別の漸化式を使って以下のように定義した人もいた.
def combination(n,k) if n > k combination(n-1,k)*n/(n-k) elsif n < k 0 else 1 end end階乗(factorial)の関数を定義して,それを使って計算した人もいた.
def factrial(n) if n>=2 factrial(n-1)*n else 1 end end def combination2(n,k) factrial(n)/(factrial(n-k)*factrial(k)) end
def match_safe(s, p) i = 0 sl = s.length() w = p.length() while i <= sl - w && submatch(s, i, p, w) < w i = i + 1 end if i <= sl - w i else -1 end end
mkdir algo17のようにします.そして,ターミナルを開くたびに
cd algo17と入力してからirbを動かしてください.詳しくは,はいぱーワークブック「14.4 コマンドを使ったファイル操作」を参照してください.
cd algo17 unzip allcode.zipを実行してください.
cd algo17を済ませてから,
ruby vote.rb 選択肢番号のように使います.
irbを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」の15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.
cd ~/algo17と入力してください.これらの機能を使うと,irbを抜けずにvoteできます.
ターミナルの基本的な使い方は,はいぱーワークブックの15.2 ターミナルの基本的な使い方を,より高度な使い方は,15.4 ターミナルの便利な使い方を参照してください.
cdというコマンドと「~」の意味は,はいぱーワークブックの14.4 コマンドを使ったファイル操作の14.4.1 ディレクトリを読むと分かります.
iruby notebookを実行すると,Webブラウザ上で対応するタブが開きます.
include(Math)を入力するように書いています. 毎回入力するのが面倒な場合は,ホームディレクトリの下に「.irbrc」というテキストファイルを作り,その中に
include(Math)と書いておくと,irb起動時にこのファイルの中身を実行してくれるので,毎回指定しなくても大丈夫です.ただし,このファイルの実行中にエラーが出ないように正しく記述剃る必要があります.また,
Math.sqrt(2)のような形で指定すれば,
include(Math)は不要です.
ruby check.rb ex01.rbと実行すると,関数を与えた時の入力と出力があっていることが確認できます. 詳しくは,補足説明 (練習問題確認プログラムの使い方)を御覧ください.
.ai, .ani, .anim, .apng, .art, .bef, .bmf, .bmp, .bsave, .cal, .cdf, .cdr, .cgm, .cgm, .ciff, .cin, .cpc, .djvu, .dng, . dpx, .dxf, .ecw, .emf, .eps, .eva, .exr, .fits, .flic, .fpx, .gerber, .gif, .hdri, .hvif, .icer, .icns, .ico, .ics, .iges, .iges pgml, .ilbm, .jbig, .jbig2, .jng, .jpeg, .jpeg 2000, .jpeg xr, .jpeg-hdr, .jpeg-ls, .miff, .mng, .pbm, .pcx, .pdf, .pgf, .pgm, .pict, .pict, .pictor, .pixel, .png, .postscript, .ppm, .psd, .psp, .rad, .rgbe, .sgi, .svg, .swf, .tga, .tiff, .vml, .wbmp, .webp, .wmf, .x aml, .xar, .xar, .xbm, .xcf, .xpm