オブジェクトを次々に渡す「Ruby Filter」ってどうだろう
ESPN MVP が FieceMobile の Top 10 App 入り

教えながら学ぶ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のためにオブジェクトを作るという点にはどうも抵抗があるが、これは慣れるしかないのだろう。

Comments

masuidrive

懐かしい話がw
min/maxを使うのは新しいですね

ujihisa

min/maxだと、(0.0...1.0)などの場合に対処できません。
endを使ってみてはいかがでしょうか。

nido

('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オブジェクトについては別対応が必要ですが。

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment

Your Information

(Name is required. Email address will not be displayed with the comment.)