TOKENS = { '}' => '{', ')' => '(', ']' => '[' }.freeze def valid_brace?(input) stack = [] valid = true input.each_char do |c| case c when '(', '[', '{' then stack.push(c) when ')', ']', '}' then valid = (stack.pop == TOKENS[c]) else valid = false end break unless valid end valid && stack.empty? end inputs = ['()[]{}', '([{}])', '[({})](]', '[(])', '(}'] inputs.each do |input| text = valid_brace?(input) ? "valid" : "invalid" puts "#{input} is #{text}" end