18/11/13 21:46:22.87 ZM1FA5dW.net
>>471 Ruby
def to_mili(num, unit)
case unit
when 'mm' then num
when 'cm' then num * 10
when 'm' then num * 1000
when 'km' then num * 1000000
end
end
def volume(sides)
v_mili = sides.scan(/(\d+)([a-z]+)/i).map{|side, unit| to_mili(side.to_i, unit)}.reduce(:*)
[[10**18, 'km^3'], [10**9, 'm^3'], [10**3, 'cm^3'], [1, 'mm^3']].each{|coe, unit| return [v_mili / coe, unit] if v_mili % coe == 0}
end
['2cm 3cm 4cm', '5mm 5mm 40mm', '3m 100000000km 3mm'].each{|sides| puts '%s => %d%s' % [sides, *volume(sides)]}
# =>
2cm 3cm 4cm => 24cm^3
5mm 5mm 40mm => 1cm^3
3m 100000000km 3mm => 900000000m^3