#!/usr/bin/ruby db = [] prevcnt = nil prevblock = 0 for line in ARGF line = line.chomp case line when /^(\d+) - (\d+)\s+(.*)/ then cnt = $3 cnt = prevcnt if cnt == ')' lo = $1.to_i hi = $2.to_i if $1.size <= 3 and $2.size <= 3 then lo += prevblock hi += prevblock elsif $2.size <= 3 then prevblock = lo / 1000 * 1000 hi += prevblock else prevblock = [lo / 1000, hi / 1000].max * 1000 end raise if hi < lo db.push([lo, hi, cnt]) prevcnt = cnt else raise line.inspect end end db.sort! if true db2 = {} for lo, hi, cnt in db lo.upto(hi) { |idx| raise "#{idx} | #{db2[idx]} | #{cnt}" if db2[idx] db2[idx] = cnt } end end for lo, hi, cnt in db printf "%05.5u\t%05.5u\t%s\n", lo, hi, cnt end