diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..83189488 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -3,7 +3,32 @@ # Time Complexity: ? # Space Complexity: ? def balanced(string) - raise NotImplementedError, "Not implemented yet" + array = string.split('') + return false if array.length % 2 != 0 + + stack = Stack.new + array.each do |ele| + stack.push(ele) + end + + array.length.times do |i| + remove = stack.pop + case remove + when '[' + return false if array[i] != ']' + when ']' + return false if array[i] != '[' + when '{' + return false if array[i] != '}' + when '}' + return false if array[i] != '{' + when '(' + return false if array[i] != ')' + when ')' + return false if array[i] != '(' + end + end + return true end # Time Complexity: ? diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..127d6a24 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,66 @@ class Queue def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = [] + @max_size = 20 + @front = -1 + @rear = -1 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if (@front == 0 && @rear == (@max_size - 1)) || + (@rear == ((@front - 1) % (@max_size - 1))) + raise "No more space" + elsif @front == -1 # Queue is empty + # initialize front and rear + @front += 1 + @rear += 1 + elsif (@rear == (@max_size - 1) && @front != 0) # rear needs to wrap around + @rear = 0 + else + @rear += 1 + end + @store[@rear] = element end def dequeue - raise NotImplementedError, "Not yet implemented" + if @front == -1 + raise "Nothing to remove" + elsif @front == @rear + dequeue = front + @front = -1 + @rear = -1 + else + dequeue = front + @front += 1 + end + return dequeue end def front - raise NotImplementedError, "Not yet implemented" + return @store[@front] if @front != -1 end + # get how many elements are in the array def size - raise NotImplementedError, "Not yet implemented" + if @rear >= @front + return (@rear - @front) + 1 + else + return (@max_size) - (@front - @rear) + 1 + end end def empty? - raise NotImplementedError, "Not yet implemented" + return @front == -1 end def to_s - return @store.to_s + if @front <= @rear + return @store[@front, @max_size].to_s + else + arr = @store[@front, @max_size] + arr += @store[0.. @rear] + return arr.to_s + end end end diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..6967c92f 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_first(element) end def pop - raise NotImplementedError, "Not yet implemented" + @store.remove_first end def empty? - raise NotImplementedError, "Not yet implemented" + @store.empty? end def to_s diff --git a/test/problems_test.rb b/test/problems_test.rb index 046f059e..2cd5e75c 100644 --- a/test/problems_test.rb +++ b/test/problems_test.rb @@ -2,7 +2,7 @@ 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 @@ -26,7 +26,7 @@ expect(balanced('[]')).must_equal true expect(balanced('{}')).must_equal true end - + it "also works if the string has opens and closes in the beginning and end" do expect(balanced('[]()')).must_equal true diff --git a/test/test_helper.rb b/test/test_helper.rb index 426168c8..f9340080 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -10,4 +10,4 @@ require_relative "../lib/queue.rb" require_relative "../lib/stack.rb" # Extra exercises -# require_relative "../lib/problems.rb" \ No newline at end of file +require_relative "../lib/problems.rb" \ No newline at end of file