オフラインリアルタイムどう書く第三回の参考問題
http://qiita.com/items/ebd8a56b41711ba459f9
haskellで書きたかったけれど、酔っ払っているので無理。rubyで。
def solve(q)
q.split('').inject([]) {|hist, e|
o,s,b = hist.empty? ? [0,0,0] : hist.last
case e
when 's'
s += 1
if s == 3
s = b = 0
o += 1
end
when 'b'
b += 1
s = b = 0 if b == 4
when 'h'
s = b = 0
when 'p'
s = b = 0
o += 1
when 'f'
s += 1 if s < 2
end
o = s = b = 0 if o == 3
hist << [o,s,b]
}.map(&:join)
end
DATA.readlines.each do |line|
q,a = line.chop.split(' -> ')
puts "#{q} -> #{solve(q).join(',')}"
end
__END__
s -> 010
sss -> 010,020,100
bbbb -> 001,002,003,000
ssbbbb -> 010,020,021,022,023,000
hsbhfhbh -> 000,010,011,000,010,000,001,000
psbpfpbp -> 100,110,111,200,210,000,001,100
ppp -> 100,200,000
ffffs -> 010,020,020,020,100
ssspfffs -> 010,020,100,200,210,220,220,000
bbbsfbppp -> 001,002,003,013,023,000,100,200,000
sssbbbbsbhsbppp -> 010,020,100,101,102,103,100,110,111,100,110,111,200,000,100
ssffpffssp -> 010,020,020,020,100,110,120,200,210,000