落書きノート

ふと自分が気になった事を書いてます

Ruby 練習問題 括弧対応のプログラム

P.212の問題9です。Arrayクラスについての最後の問題です。挑戦してみました。これはちょっと難しいですね。ひとしきり考えて、時間がかかりそうだったので、答えを見ながら動作確認してみました。

def balanced?(array)
  stack = Array.new()
  array.each{|elem|
    case elem
    when '('
      stack.push(elem)
    when '{'
      stack.push(elem)
    when ')'
      prev_elem = stack.pop
      if prev_elem != '('
        return false
      end
    when '}'
      prev_elem = stack.pop
      if prev_elem != '{'
        return false
      end
    else
      return false
    end
  }

  if stack.empty?
    return true
  else
    return false
  end
  
end

p balanced?(["(","{","{","}","(",")","}","(",")",")"]) # => true
p balanced?(["(","{","{","}","(","}",")",")"]) # => false

テキストエディタシンタックスハイライト機能が作れそうな感じですね。