教えながら学ぶRuby:「Rangeの積を求める」をやってみた
今日は必要もなく早起きしてしまったので、Rubyに感して書かれた過去のブログなどをネットサーフィング。すると、「Rangeの積を求める」に遭遇。この手のものに出会うと、かならず自分で解きたくなるのが私の性分。1年以上の激遅レス。
class Range
def &(dest)
return nil if self.max <= dest.min or dest.max <= self.min
return ([self.min, dest.min].max..[self.max, dest.max].min)
end
end
Rubyでmin/maxをどう書けば良いのか分からず少し苦労してしまったが、Arrayを使うのだと一度理解してしまえば簡単。たかがmin/maxのためにオブジェクトを作るという点にはどうも抵抗があるが、これは慣れるしかないのだろう。
懐かしい話がw
min/maxを使うのは新しいですね
Posted by: masuidrive | 2007.10.16 at 08:09
min/maxだと、(0.0...1.0)などの場合に対処できません。
endを使ってみてはいかがでしょうか。
Posted by: ujihisa | 2007.10.16 at 08:55
('a'..'z')&('aa'..'zz')の結果が・・。
効率を考えなければ
class Range
def &(dest)
w=self.to_a&dest.to_a
w.empty? ?nil:w.min..w.max
end
end
がシンプルな解でしょうか。
to_aやmin,maxが使えないRangeオブジェクトについては別対応が必要ですが。
Posted by: nido | 2007.10.16 at 09:19