diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..732c6de0 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -1,13 +1,39 @@ require_relative './stack.rb' -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) +# Space Complexity: O(n) def balanced(string) - raise NotImplementedError, "Not implemented yet" + stack = Stack.new + string.each_char do |char| + if char == "(" || char == "[" || char == "{" + stack.push(char) + elsif char == ")" || char == "]" || char == "}" + last_pushed = stack.pop() + if last_pushed == "(" && char != ")" || + last_pushed == "[" && char != "]" || + last_pushed == "{" && char != "}" + return false + end + end + end + + # check if stack is full of opening braces + return stack.empty? end -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) +# Space Complexity: O(n) def evaluate_postfix(postfix_expression) - raise NotImplementedError, "Not implemented yet" + stack = Stack.new + postfix_expression.each_char do |char| + if /[0-9]/.match(char) + stack.push(char.to_i) + elsif /[\+\-\/\*]/.match(char) + second_operand = stack.pop() + first_operand = stack.pop() + stack.push(first_operand.send(char, second_operand)) + end + end + + return stack.pop() end diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..3c461685 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,57 @@ class Queue + ARRAY_SIZE = 20 + def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new(ARRAY_SIZE) + @front = @back = 0 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if self.full? + raise NoMemoryError, "Array is full" + else + @store[@back] = element + @back = (@back + 1) % ARRAY_SIZE + end end def dequeue - raise NotImplementedError, "Not yet implemented" + if self.empty? + raise IndexError, "Array is empty" + else + dequeued_element = @store[@front] + @store[@front] = nil + @front = (@front + 1) % ARRAY_SIZE + return dequeued_element + end end def front - raise NotImplementedError, "Not yet implemented" + return @store[@front] end def size - raise NotImplementedError, "Not yet implemented" + return @front < @back ? @back - @front : @store.length + @back - @front end def empty? - raise NotImplementedError, "Not yet implemented" + return @front == @back + end + + def full? + return @front == (@back + 1) % ARRAY_SIZE end def to_s - return @store.to_s + string = "[" + i = @front + until i == @back - 1 + string << "#{@store[i]}, " + i = (i + 1) % ARRAY_SIZE + end + + string << "#{@store[@back - 1]}]" + return string end end diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..c262e900 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,18 @@ class Stack def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = LinkedList.new end def push(element) - raise NotImplementedError, "Not yet implemented" + @store.add_last(element) end def pop - raise NotImplementedError, "Not yet implemented" + @store.remove_last() end def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end def to_s diff --git a/test/problems_test.rb b/test/problems_test.rb index 046f059e..f28aff57 100644 --- a/test/problems_test.rb +++ b/test/problems_test.rb @@ -1,8 +1,9 @@ require_relative 'test_helper' +require_relative '../lib/problems' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new -xdescribe "Test wave 3 problems" do +describe "Test wave 3 problems" do describe "balanced" do it "Given balanced strings it should return true" do