豊福@パパイヤです。一から ruby 勉強中です。
オブジェクトを使ったちょっと面白いプログラムを
思い出したので練習問題がてらに ruby で書いてみま
した。チェーン状につながったフィルタオブジェクト
を通すと合成数はふるい落とされていくというプログ
ラムです。
「こう書いた方が ruby らしい」など教えて下さい。
class Counter
def initialize(v)
@value = v
end
def out
@value += 1
return @value - 1
end
end
class Filter
def initialize(src, f)
@source = src
@factor = f
end
def out
loop do
n = @source.out()
if n % @factor != 0
return n
end
end
end
end
class Sieve
def initialize(src)
@source = src
end
def out
n = @source.out()
src = Filter.new(@source, n)
@source = src
return n
end
end
if ! max = ARGV.shift; max = 100; end
max = max.to_i
c = Counter.new(2)
s = Sieve.new(c)
loop do
n = s.out()
if n > max
break
end
print n, "\n"
end
---
豊福@パパイヤ
unbound / papaya.juice.or.jp
toyofuku / juice.or.jp