Module: Philiprehberger::Interval
- Defined in:
- lib/philiprehberger/interval.rb,
lib/philiprehberger/interval/range.rb,
lib/philiprehberger/interval/version.rb
Defined Under Namespace
Constant Summary collapse
- VERSION =
'0.1.2'
Class Method Summary collapse
-
.gaps(intervals) ⇒ Array<Range>
Find gaps between a collection of intervals.
-
.merge(intervals) ⇒ Array<Range>
Merge a collection of overlapping or adjacent intervals into non-overlapping intervals.
-
.new(start, finish) ⇒ Range
Create a new interval.
Class Method Details
.gaps(intervals) ⇒ Array<Range>
Find gaps between a collection of intervals.
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/philiprehberger/interval.rb', line 46 def self.gaps(intervals) merged = self.merge(intervals) return [] if merged.length < 2 result = [] merged.each_cons(2) do |a, b| result << Range.new(a.finish, b.start) if a.finish < b.start end result end |
.merge(intervals) ⇒ Array<Range>
Merge a collection of overlapping or adjacent intervals into non-overlapping intervals.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/philiprehberger/interval.rb', line 23 def self.merge(intervals) return [] if intervals.empty? sorted = intervals.sort merged = [sorted.first] sorted[1..].each do |current| last = merged.last combined = last.union(current) if combined merged[-1] = combined else merged << current end end merged end |