Skip to content

Instantly share code, notes, and snippets.

@leandronsp
Created April 22, 2024 21:22
Show Gist options
  • Select an option

  • Save leandronsp/07503f074abe02bb63cb02e6cecb1bbf to your computer and use it in GitHub Desktop.

Select an option

Save leandronsp/07503f074abe02bb63cb02e6cecb1bbf to your computer and use it in GitHub Desktop.

Revisions

  1. leandronsp created this gist Apr 22, 2024.
    40 changes: 40 additions & 0 deletions leetpolvo.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,40 @@
    # ruby 3+
    # gem install test-unit
    require 'test/unit/assertions'
    include Test::Unit::Assertions

    def balanced?(input)
    delimiters = {
    "(" => ")",
    "{" => "}",
    "[" => "]"
    }

    stack = []

    for char in input.chars
    case char
    when *delimiters.keys
    stack.push(char)
    when *delimiters.values
    return false if delimiters[stack.pop] != char
    end
    end

    stack.size == 0
    end

    assert balanced?("abc")
    assert balanced?("(abc)")
    assert balanced?("(ab(c))")
    assert balanced?("(abc)d")
    assert balanced?("(abc[%def])")
    assert balanced?("$(abc[de]fg{hi}jk)%//")

    refute balanced?("(abc")
    refute balanced?("(ab(c)")
    refute balanced?("abcd]")
    refute balanced?("(abc]d")
    refute balanced?("(({abc})")
    refute balanced?("(ab[cd)ef]")
    refute balanced?("{ab(cd}ef)")