# Detect if 2 ranges share elements

**URL:** <https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669>\
**Category:** Ruby\
**Created:** [April 11, 2010, 1:13am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669 "2010-04-11T01:13:52Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![derek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@derek](https://www.ruby-forum.com/u/derek)\
**Post date:** [April 11, 2010, 1:13am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669/1 "2010-04-11T01:13:52Z")

</div>

Probably a simple problem for most of you out there:

What is the best way to make sure two ranges don’t share any elements?

For example:

[1…10] and [9…15] =\> false (they share common elements)  
[1…10] and [11…20] =\> true (they are both unique)

Thanks,  
Derek

---

<div class="post-metadata">

**Author:** ![derek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@derek](https://www.ruby-forum.com/u/derek)\
**Post date:** [April 11, 2010, 1:32am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669/2 "2010-04-11T01:32:27Z")

</div>

On Apr 10, 7:13 pm, Derek C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Probably a simple problem for most of you out there:
> 
> What is the best way to make sure two ranges don’t share any elements?
> 
> For example:
> 
> [1…10] and [9…15] =\> false (they share common elements)  
> [1…10] and [11…20] =\> true (they are both unique)

Checkout Facets’ Range#overlap

> > require ‘facets/range/overlap’  
> > =\> true  
> > (1…10).overlap?(9…15)  
> > =\> true  
> > (1…10).overlap?(11…20)  
> > =\> false

---

<div class="post-metadata">

**Author:** ![derek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@derek](https://www.ruby-forum.com/u/derek)\
**Post date:** [April 11, 2010, 1:34am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669/3 "2010-04-11T01:34:47Z")

</div>

Hello Derek

2010/4/11 Derek C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Probably a simple problem for most of you out there:
> 
> What is the best way to make sure two ranges don’t share any elements?

I don’t know if it’s the best but it should be working at least

def have\_common?(r1,r2)  
arr = r1.to\_a & r2.to\_a  
!arr.empty?  
end

have\_common?(1…10,9…15)  
have\_common?(1…10,11…20)

Cheers,

---

<div class="post-metadata">

**Author:** ![derek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@derek](https://www.ruby-forum.com/u/derek)\
**Post date:** [April 11, 2010, 1:54am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669/4 "2010-04-11T01:54:42Z")

</div>

Ah, nevermind:

> gem install facets  
> …it could save your life.

---

<div class="post-metadata">

**Author:** ![derek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@derek](https://www.ruby-forum.com/u/derek)\
**Post date:** [April 11, 2010, 1:45am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669/5 "2010-04-11T01:45:02Z")

</div>

Thanks Jean, very elegant solution!

Thomas, I like your solution but I get

> in `require’: no such file to load – facets/range/overlap (LoadError)

when I try to use

> > > require ‘facets/range/overlap’

Any ideas why?

---

<div class="post-metadata">

**Author:** ![derek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@derek](https://www.ruby-forum.com/u/derek)\
**Post date:** [April 11, 2010, 2:06am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669/6 "2010-04-11T02:06:26Z")

</div>

Ok, I’m way too tired to be given posting privileges… Used [] instead  
of (). I shall go far, far away now.

---

<div class="post-metadata">

**Author:** ![derek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@derek](https://www.ruby-forum.com/u/derek)\
**Post date:** [April 11, 2010, 2:03am UTC](https://www.ruby-forum.com/t/detect-if-2-ranges-share-elements/186669/7 "2010-04-11T02:03:38Z")

</div>

And I’m back again…

Facets is no longer giving me a “not found” error, but when I do the  
following:

> require ‘facets/range/overlap’  
> puts [1…8].overlap?([7…14])

I get:

> in `<main>': undefined method`overlap?’ for [1…8]:Array (NoMethodError)
