4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CodeIQ 中学入試から:単位のある計算をRubyで解く

Last updated at Posted at 2014-09-24

問題はこちら
https://codeiq.jp/ace/nabetani_takenori/q1058

# -*- coding: utf-8 -*-
CV = {
  '日'=>24*60*60,'時間'=>60*60,'分'=>60,'秒'=>1,
  'km'=>1000*100*10,'m'=>100*10,'cm'=>10,'mm'=>1,
  'kg'=>1000000,'g'=>1000,'mg'=>1,
}
 
def to_unit(s)
  s.scan(/\d+[^\d]+/).inject(0) {|sum, e|
    e =~ /(\d+)(.+)/
    sum += $1.to_i * CV[$2]
  } * (s[0] == '-' ? -1 : 1)
end

def solve(q)
  l_sum, r_sum = q.split('=').map{|s|
    s.scan(/[+-]?\d+[^+-]+/).inject(0){|sum, e| sum += to_unit(e)}
  }
  x_pos = (q =~ /(-?)□([^+-=]+)/)
  ret = x_pos < q.index('=') ? r_sum - l_sum : l_sum - r_sum
  ret *= -1 if $1 == '-'
  ret / CV[$2]
end

DATA.readlines.each do |line|
  no,q1,q2 = line.strip.split(/\s+/)
  a1 = solve(q1)
  a2 = solve(q2)
  print no + "\t" + a1.to_s + "\t" + a2.to_s + "\t"
  puts a1 == a2 ? ' o' : ' x'
end
__END__
T01	3m20cm-3m10cm-□mm=5mm	□kg=95000g
T02	2kg+500g+□g=3kg200g	□m=700000mm
T03	12kg+1kg500g+□g=13kg700g	720000秒=□時間
T04	2時間30分-□時間=90分	□km=1000m
T05	1日-□分=23時間20分	40000mm=□m
T06	3日-□秒-71時間59分30秒=7秒	23000g=□kg
T07	23時間30分+29分+60秒=□日	□km=1000m
T08	1日+23時間15分+□分+120秒=2日	43000m=□km
T09	1km-1m-1cm-1mm=□mm	□kg=998989000g
T10	3m20cm-5cm2mm-20cm8mm+□cm=312cm	□km=18000m
T11	1日-1時間-1分-1秒=□秒	297860400秒=□時間
T12	1kg-1g=□g	□日=23976時間
T13	□日-1時間-1分-1秒=82739秒	1000g=□kg
T14	4km-3995m-480cm-□mm=20cm	□km=0m
T15	12m30cm-7m43cm-45cm2mm-□mm=3m80cm	14832時間=□日
T16	0m+□km=0mm	0g=□kg
T17	24時間+□分=1日	□日=0時間
T18	4cm3mm+□km+5mm=48mm	0分=□時間
T19	□分+24時間+7日+14分34秒=777634秒	□日=2053440分
T20	122日+20時間35分24秒=□秒	10614924000g=□kg
T21	240km-218987m-8780cm-77648mm=□mm	□日=500341248時間
T22	120分+46分-□分=1時間19分	720分+9300分-4800分=□時間
T23	100kg+32kg-36kg=□kg	296mg-100mg-□mg=100mg
T24	533448650mm-□km-52122650mm=203326000mm	270840秒+□時間+683832秒=22日15時間11分12秒
T25	83m+□m+130m=626m	137km260m55cm2mm+377910000mm-□km=102km170m55cm2mm
T26	1000kg+1000kg-1609kg=□kg	4時間+3時間14分-43分=□分
T27	704kg720g-235kg-4kg720g=□kg	1425日-480日-480日=□日
T28	24629793500mg+4359473400mg-12783kg266g900mg=□kg	□kg=16206000000mg
T29	789m-250m-244m=□m	275210g+□kg+126380g=696590g
T30	625cm-□cm-300cm=1m	219km100m+□km+153km=597100m
T31	1564200g-498kg-404200g=□kg	331日3時間34分+658日20時間58分-□日=328日32分
T32	219kg645g600mg-□kg=66kg645g600mg	148387424mm+□km=301387424mm
T33	57m+10460cm+□m=32360cm	10cm+□mm=26cm2mm
T34	1437日3時間9分-□日-31733100秒=7071840秒	1157700分+748680分-□日=483660分
T35	4608816秒+□日=67940016秒	50cm+1000mm-□mm=76cm7mm
T36	220kg300g+60kg355g-□kg=50655g	□km+127km501m10cm=357501100mm
T37	5088分+4日3時間-5508分=□時間	137651880mg-28kg300g290mg-□kg=17kg351g590mg
T38	72460m-□km=4km460m	18時間14分+2日3時間40分+□時間=496440秒
T39	12000mg+28g-□g=0mg	98km125m71cm-3831300cm-1981271cm=□km
T40	55220mm+389910mm+□m=1km25m13cm	1604904秒+1957249秒-□時間=17日1時間29分13秒
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?