2006-03-07から1日間の記事一覧

rm_rf

FileUtilsクラスのrm, rm_f, rm_r, rm_rfメソッドは、それぞれUNIXのコマンドrm, rm -f, rm -r, rm -rfに対応する機能を持ちます。 require 'fileutils' FileUtils.mkdir_p('deep/deeper/deepest/dir') p FileTest.exist?('deep/deeper/deepest/dir') #=> tr…

Rubyソースコード完全解説

青木峰郎さんの書籍『ソースコード完全解説』(RHG)がHTMLで公開されていることを遅ればせながら今日知りました。 Rubyソースコード完全解説

swapcase

String#swapcaseは大文字小文字を反転します。 p "WikiName".swapcase #=> "wIKInAME"計算いろいろ。 p 365 % 7 #=> 1 p 365.2 % 7 #=> 1.19999999999999 p "Rubyco" * 3 #=> "RubycoRubycoRubyco"

Set

Setクラスは集合を表します。 require 'set' s = Set.new p s #=> #<Set: {}> s.add("Alice") s.add("Alice") s.add("Alice") s.add("Alice") s.add("Bobby") s.add("Bobby") s.add("Chris") s.add("Chris") s.add("Chris") s.add("Chris") s.add("Chris") p s #=> #<Set: {"Alice", "Chris", "Bobby"}> </set:></set:>…

特異メソッド

数に対して特異メソッドを定義しようとすると構文解析エラーになりました。 def 1.hello puts "Hello" end #=> parse error, unexpected tINTEGER構文解析エラーを回避するためカッコをつけたら、リテラルに特異メソッドは定義できないと言われました。 def …

undef

undefでメソッドを呼び出せないようにできます。 以下のhelloメソッドは一度しか呼び出せないメソッドです。 def hello puts "Hello!" undef hello end hello #=> Hello! hello #=> undefined local variable or method `hello' for main:Object (NameError)

クイックソート

am

Rubyでクイックソートを作ってみました。シンプルな仕上がり♪ qsortとqsort!を作りました。 比較関数をブロックで与えることができます。 与えられなかったらを使います。 課題: callではなくyieldを使う版 課題: 非再帰版 class Array def qsort(&cmp) self…

ユークリッドの互除法

am

Rubyで「ユークリッドの互除法」を実装しました。最古のアルゴリズム♪ def euclid(m, n) loop do puts "m = #{m}, n = #{n}" if $DEBUG r = m % n return n if r == 0 m, n = n, r end end p euclid(60, 42)実行結果です。-dオプションでグローバル変数$DEBU…

エラトステネスの篩

am

Rubyで「エラトステネスの篩」を実装しました。単純な版♪ def sieve(m) prime = (0..m).to_a (2..m).each do |p| next if not prime[p] yield(p) if block_given? (p+p..m).step(p) do |k| prime[k] = false end end prime[2..m].find_all {|p| p} end sieve…