Intersection of two points in Ruby

I want to find intersection of two points in Ruby. What type of checks should be there so that the function works for all cases.

Pseudocode code is

intersection(range1, range2)

  • notCommonR1 = part of range1 which is not common

  • common = common part between both ranges

  • notCommonR2 = part of range2 which is not common

For example

intersection([0, 3], [2, 4]) == {
:range1 => [[0, 2]],
:both => [2, 3],
:range2 => [[3, 4]]


This is fairly straightforward; there aren't really any special checks to make here; the only special case is if there is no common part between the ranges.

def intersection(a, b)
  # Sort so that a1 < a2, b1 < b2, a1 < b1
  a, b = [a.sort, b.sort].sort
  a1, a2 = a
  b1, b2 = b

  if a2 > b2
    {range1: [[a1, b1], [b2, a2]], both: [[b1, b2]], range2: []}
  elsif a2 >= b1
    {range1: [[a1, b1]], both: [[b1, a2]], range2: [[a2, b2]]}
    {range1: [[a1, a2]], both: [], range2: [[b1, b2]]}

Depending on how you use both, nil as a value may not be ideal; use whatever indicates no common range.

def intersection((x1, x2), (x3, x4))
  h = {}
  e1, e2 = x1..x2, x3..x4
  [x1, x2, x3, x4].sort.each_cons(2) do |x5, x6|
    key =
    case [e1, e2].select{|e| e.include?(x5..x6)}
    when [e1] then :range1
    when [e2] then :range2
    when [e1, e2] then :both
    h[key] ||= []
    h[key].push([x5, x6])

Need Your Help

Always show overlay for edges in Cytoscape.js

javascript canvas graph overlay cytoscape.js

Is there a way to always show the edge line overlay in Cytoscape.js

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.