diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..c0d57951 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -1,13 +1,40 @@ -require_relative './stack.rb' +require_relative './Stack.rb' -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(nlogn) +# Space Complexity: O(n) def balanced(string) - raise NotImplementedError, "Not implemented yet" + stack = Stack.new + arr = string.split('') + chars = ['(', '[', '{'] + arr.each do |char| + if chars.include?(char) + stack.push(char) + else + current = stack.pop + if current == '(' && char != ')' + return false + elsif current == '[' && char != ']' + return false + elsif current == '{' && char != '}' + return false + end + end + end + 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 char.match(/[0-9]/) + stack.push(char.to_i) + else + a = stack.pop + b = stack.pop + stack.push(eval "#{b}#{char}#{a}") + end + end + return stack.pop end diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..0c2235ca 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,65 @@ class Queue - def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + attr_accessor :start, :size, :start, :end + + def initialize(size=20) + @store = Array.new(size) + @size = size + @start, @end = -1, -1 + end + + def full? + (@end + 1) % @size == @start end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + # raise ArgumentError.new("Queue full") if self.full? + + if self.empty? + @start = 0 + @end = 1 + @store[@start] = element + elsif @start == @end + raise ArgumentError.new("Queue full!") + else + @store[@end] = element + @end = (@end + 1) % @size + end end def dequeue - raise NotImplementedError, "Not yet implemented" + if @start == -1 + raise ArgumentError.new("Queue empty") + else + element = @store[@start] + @start = (@start + 1) % @size + if @start == @end + @start, @end = -1 + end + end + return element end def front - raise NotImplementedError, "Not yet implemented" + raise ArgumentError.new("Queue empty") if @start == -1 + @start end def size - raise NotImplementedError, "Not yet implemented" + @size end def empty? - raise NotImplementedError, "Not yet implemented" + return @start == -1 end def to_s - return @store.to_s + arr = [] + current = @start + while current != @end + arr << @store[current] + current = (current+1) % size + end + return arr.to_s end end diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..29a90e42 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,22 +1,24 @@ +require_relative 'linked_list' + 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 if !@store.empty? end def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end def to_s return @store.to_s end end + diff --git a/test/problems_test.rb b/test/problems_test.rb index 046f059e..2defe612 100644 --- a/test/problems_test.rb +++ b/test/problems_test.rb @@ -1,8 +1,9 @@ require_relative 'test_helper' +require_relative '../lib/problems.rb' 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