2006-06-01から1ヶ月間の記事一覧

冴子先生で素数

id:kkkkkkkkさんとartonさんのを見て「冴子先生で素数」を作りました。作ったといっても大半はartonさんのを写しただけですけれど…。 http://d.hatena.ne.jp/kkkkkkkk/20060620/p1 http://arton.no-ip.info/diary/20060525.html#p01 #!/usr/local/bin/ruby -…

10000までの完全数を列挙せよ

エラトステネスの篩もよいけれど、別の問題もやろうよ。ということで「完全数」です。 def perfect(n = 100, &block) sum = Array.new(n + 1, 1) (2..n).each do |i| if i == sum[i] block.call(i) end k = i + i while k <= n sum[k] += i k += i end end s…

100までの整数から素数を列挙せよ

普通に実装。(追記:不等号、間違っていたので直しました)。 def prime(n = 100, &block) is_prime = Array.new(n + 1, true) is_prime[0] = false is_prime[1] = false (2..n).each do |p| next unless is_prime[p] block.call(p) k = p + p while k <= n …

すべてのクラスを調べる

ObjectSpace.each_object(Class)で全クラスをvisitできます。 ObjectSpace.each_object(Class) do |o| p o end全クラスではなくExceptionクラスの子孫クラスだけを調べたいならば、次のようにします。 ObjectSpace.each_object(Class) do |o| if o < Excepti…

組み合わせの数

Haskellで書いた組み合わせの数をRubyで書いてみる。 def c(n,k) d(n,k).div(d(k,k)) end def d(n,k) (n-k+1..n).inject(1) {|result,item| result * item} end p c(1000,100) #=> 63850511926305130236698511142022274281262900693853331776286816221524376…

zipWithの自作

id:omochistさんのzipWithを読んで、私も書いてみました。。 対称的じゃないので、きれいじゃないけど、dupしないというメリットはあります。 def zipWith(xs, ys, &block) zipped = [] xs.each_with_index do |x, k| zipped << block.call(x, ys[k]) end zi…

yieldとProc#call

MatzさんのyieldとProc#callを読んで。 Matzさんが書いていた、 Proc#yieldメソッドを導入 nil.yieldメソッドも用意。これが「no block given」のメッセージを出す という二点は、現在のRubyでやるとしたら、以下のようになるという意味でしょうか。 class P…

パスカルの三角形、もう少し

epicsさんの続・パスカルの三角形の下の方に「挫折した方法」というのがあったので、そこから発展させてみました。ちょっと発想を変えまして…。 (1..9).inject([[1]]) {|c, n| c << eval(c[n - 1].inject("[0+") {|s, k| s + "#{k},#{k}+"} + "0]") }.each {…