LoginSignup
1
0

More than 5 years have passed since last update.

オフラインリアルタイムどう書く第三回の参考問題解答(Ruby)

Posted at

オフラインリアルタイムどう書く第三回の参考問題
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
1
0
1

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
1
0