2012-05-04 6 views
1

私は問題、Rubyのコードがあります。ルビーレンジ部品

def give_me_all_periods(period, paid_periods) 
    # Can you help me? 
end 

period = [1..10] 
paid_periods = [1..2, 5..8] 
give_me_all_periods(period, paid_periods).should == [1...2, 2...5, 5...8, 8...10] 
+0

はpaid_periodsは常に期間内であるか、または必要が同様に検証することないでしょうか? –

+2

なぜ「1..2」から「1 ... 2」に変わるのですか? –

答えて

1
def give_me_all_periods(period, paid_periods) 
     p = period | paid_periods 
     union = p.inject([]){|u,x| u = u|range_to_arr(x)}.sort 
     ranges =[] 
     union.each_cons(2){|a| ranges << Range.new(a[0],a[1]) } 
     ranges 

end 

def range_to_arr(r) 
     [r.first,r.last] 
end 
+0

def give_me_all_periods(period、paid_periods) thresholds =(期間+ paid_periods).map {| p | [p.begin、p.end]} .flatten.uniq.sort thresholds.zip(thresholds [1、thresholds.size])。マップ{|ペア|ペア[1]? (ペア[0] ...ペア[1]):なし} .compact end – arion