Pete Hodgson wrote:

Hi Folks,

Given a sorted enumeration I need to find the first gap in a sequence.

e.g.

3 == find_gap [1,2,4,5]

nil == find_gap [1,2,3,4]

Here's the best I can come up with

def first_gap( seq )

seq.each_cons(2) do |l,r|

_next = l.next

return _next if r!= _next

end

nil

end

but it seems rather ugly. Anyone have a more elegant implementation?

Cheers,

Pete

The following does not quite meet your specs (it returns an array with

all gaps, empty if there are no gaps). Anyway, here is my try:

def find_gaps( ar )

(ar.first .. ar.last).to_a - ar

end

p find_gaps( [1,2,4,5] )

p find_gaps( ["a", "b", "d", "e", "h"] )

require 'date'

d1 = Date.new(2008,11,6)

d2 = Date.new(2008,11,7)

d3 = Date.new(2008,11,9)

puts find_gaps( [d1,d2,d3] )

=> [3]

=> ["c", "f", "g"]

=> 2008-11-08

hth,

Siep

## ···

--

Posted via http://www.ruby-forum.com/.