this post was submitted on 15 Aug 2023
21 points (100.0% liked)

Programming Challenges

6 readers
1 users here now

Welcome to the programming.dev challenge community!

Three challenges will be posted every week to complete

Easy challenges will give 1 point, medium will give 2, and hard will give 3. If you have the fastest time or use the least amount of characters you will get a bonus point (in ties everyone gets the bonus point)

Exact duplicate solutions are not allowed and will not give you any points. Submissions on a challenge will be open for a week.

A leaderboard will be posted every month showing the top people for that month

founded 1 year ago
MODERATORS
 

Welcome to the first programming challenge! Three of these will be posted a week and you can complete it in any language you want.

You get a point for completing an easy challenge, 2 for a medium, and 3 for a hard. For each challenge if you solve it in the least amount of characters you get a bonus point, and if your code runs the fastest when I check it you also get a bonus point. (ties mean everyone who tied gets the bonus point although exact duplicate answers wont count)

Ill be posting a leaderboard that will show the people who have the most points every month

Submissions will be open for a week


As a new hire of bracket inc., you have been tasked with getting rid of excess brackets lying around the facility. You must simplify a series of brackets so that only brackets that dont have a match remain (a match is an opening and closing bracket of the same type beside each other). The final result should have no matches

As an example for the input [(({})({)(()}] the expected output would be [(({)(}]

These are the valid types of brackets: (){}[]

Your system will be tested against 10 different unknown test cases before it is unleashed on the facility. In order to complete this task you must pass all of the test cases.

Any programming language may be used and to submit an answer reply on this post with the code and the language you coded it in

Edit: Clarification, you must take input in from the user using the program instead of them being hardcoded. (makes it easier to test)

you are viewing a single comment's thread
view the rest of the comments
[–] flakpanzer@programming.dev 1 points 1 year ago* (last edited 1 year ago)

Elixir solution

To run it, you need Erlang and Elixir installed with iex available on path (installation instructions here)

Paste the code in a file with extension .exs (e.g. solution.exs) and run with iex solution.exs.

It prints the output to Standard Output and appends a newline at the end

Please let me know if this method of running code does not work.

defmodule Brackets do
  @pairs %{
    "]" => "[",
    "}" => "{",
    ")" => "("
  }

  def simplify(brackets) do
    brackets
    |> String.trim()
    |> String.graphemes()
    |> Enum.reduce([], &reducer/2)
    |> Enum.reverse()
  end

  defp reducer(c, []), do: [c]

  defp reducer(c, [x | rest] = acc) do
    if @pairs[c] == x do
      rest
    else
      [c | acc]
    end
  end

end

brackets = IO.gets("Please enter your input> ")

brackets
|> Brackets.simplify()
|> IO.puts()