fork download
  1. def str_replace(s, pair)
  2. cnt = 0
  3. while s.index(pair)
  4. cnt += 1
  5. s = s.sub(pair, '')
  6. end
  7. [s, cnt]
  8. end
  9.  
  10. def calc_count(s)
  11. ret = 0
  12. [['()', 0], ['((', 1], ['))', 1], [')(', 2]].map do |e|
  13. pair, mul = e
  14. s, cnt = str_replace s, pair
  15. ret += cnt * mul
  16. end
  17. s != '' ? -1 : ret
  18. end
  19.  
  20. s = [')',
  21. '())())',
  22. ')()()(',
  23. ')))(((',
  24. '(())())((())(()(',
  25. '())((())()))()(((()))()((((((((()()(()))']
  26.  
  27. puts s.map { |e| [e, ' ---> ', calc_count(e)].join }
  28.  
Success #stdin #stdout 0s 28688KB
stdin
Standard input is empty
stdout
) ---> -1
())()) ---> 1
)()()( ---> 2
)))((( ---> 4
(())())((())(()( ---> 3
())((())()))()(((()))()((((((((()()(())) ---> 5