#!/usr/bin/env ruby a = (5..10) b = (8..9) def split_range a, b, index=0 return nil if a==b aa = a.to_a begin_split = b.first end_split = b.last p1 = aa[0..aa.index([begin_split-1,aa.first].max)] p2 = aa[aa.index([end_split+1, aa.last].min)..aa.last] if begin_split > a.first && end_split < a.last return [(p1.first..p1.last), "X#{index}", (p2.first..p2.last)] elsif begin_split == a.first return ["X#{index}", (p2.first..p2.last)] elsif end_split == a.last return [(p1.first..p1.last), "X#{index}"] end return nil end puts split_range(a, b).to_s