Sebastians Blog Neues aus den Softwareminen…

Bracket-Balancing in Ruby

Ich kann mir nicht helfen, nach zwei Jahren Ruby sieht Java manchmal nur noch umständlich aus. Gerade bei kleinen, in sich geschlossenen Programmen sollte man die Sprache mit Bedacht wählen. Wie aufwendig kann es sein herauszufinden, ob die verschiedenen Klammerarten in einem String ausbalanciert sind? Diese Frage stellte sich auch Code Corner und lieferte diese Lösung in Java:

http://www.corejavainterviewquestions.com/code-corner-bracket-balancing/

http://www.corejavainterviewquestions.com/code-corner-bracket-balancing/

Als Rubyist juckt es da in den Fingern, das muss doch schneller gehen.

require 'test/unit/assertions'
extend MiniTest::Assertions

class String

  BRACKETS = {
    "(" => ")",
    "[" => "]",
    "{" => "}",
  }

  def balanced?
    stack = []
    each_char do |char|
      if BRACKETS.keys.include? char
        stack.push char
      elsif BRACKETS.values.include? char
        return false if BRACKETS[stack.pop] != char
      end
    end
    stack.empty?
  end

end

assert "".balanced?
assert "([Hell{} T(h(e[r]e))]boom)".balanced?
assert not("(a[b{c)d]e}".balanced?)
assert not("([{".balanced?)
assert not("}])".balanced?)
Dieser Beitrag wurde unter abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink. Sebastian bei .

Die Kommentarfunktion ist geschlossen.