diff --git a/lib/linked_list.rb b/lib/linked_list.rb index 136d8ac9..a1da8cbd 100644 --- a/lib/linked_list.rb +++ b/lib/linked_list.rb @@ -34,11 +34,12 @@ def add_first(value) def remove_first() raise ArgumentError, "Empty" if self.empty? - - value = @head.data - @head = @head.next - @head.previous = nil - return value + + value = @head.data + @head.previous = nil + @head = @head.next + + return value end def empty? diff --git a/lib/problems.rb b/lib/problems.rb index 61bcaa5a..f55619fd 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -1,7 +1,22 @@ require_relative './stack.rb' def balanced(string) - raise NotImplementedError, "Not implemented yet" + stack = Stack.new + string.each_char do |char| + if char == "{" || char == "[" || char == "(" + stack.push(char) + end + if (stack.get_last() == "{" && char == "}") || + (stack.get_last() == "[" && char == "]") || + (stack.get_last() == "(" && char == ")") + stack.pop() + end + end + if stack.length() == 0 + return true + else + return false + end end def evaluate_postfix(postfix_expression) diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..794779d6 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,16 +1,40 @@ class Queue def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new(10) + @front = @rear = -1 + @size = 0 + @capacity = 10 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if @size == @capacity + return + else + if @front == -1 + @front = 0 + end + @rear = (@rear + 1) % @capacity + @store[@rear] = element + @size += 1 + end end - def dequeue - raise NotImplementedError, "Not yet implemented" + def dequeue + if empty? + return + elsif @front == @rear + removed_element = @store[@front] + @front = -1 + @rear = -1 + @size -= 1 + return removed_element + else + removed_element = @store[@front] + @front = (@front + 1) % @capacity + @size -= 1 + return removed_element + end end def front @@ -22,10 +46,21 @@ def size end def empty? - raise NotImplementedError, "Not yet implemented" + if @size == 0 + return true + else + return false + end end def to_s - return @store.to_s + if @size == 0 + return [].to_s + elsif @front <= @rear + return @store[@front..@rear].to_s + else + new_array = @store[@front .. @capacity -1] + @store[0..@rear] + return new_array.to_s + end end end diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..470df159 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,29 @@ +require 'linked_list.rb' 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" + return nil if self.empty? + item = @store.remove_last() + return item + end + + def get_last + return @store.get_last() + end + + def length + return @store.length 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 9d30e1cd..5fe31f25 100644 --- a/test/problems_test.rb +++ b/test/problems_test.rb @@ -7,24 +7,20 @@ describe "Test wave 3 problems" do describe "balanced" do it "Given balanced strings it should return true" do - skip expect(balanced('(({}))')).must_equal true end it "regards an empty string as balanced" do - skip expect(balanced('')).must_equal true end it "will return false for an unbalanced set of parens" do - skip expect(balanced('(()')).must_equal false expect(balanced('(()}')).must_equal false expect(balanced('([]]')).must_equal false end it "also works for {} and []" do - skip expect(balanced('[]')).must_equal true expect(balanced('{}')).must_equal true end @@ -32,7 +28,6 @@ describe "postfix" do it "can add a 2 numbers together" do - skip expect(evaluate_postfix("34+")).must_equal 7 expect(evaluate_postfix("34*")).must_equal 12 expect(evaluate_postfix("34-")).must_equal -1 @@ -40,7 +35,6 @@ end it "can add a evaluate a more complicated expression" do - skip expect(evaluate_postfix("34+2*")).must_equal 14 expect(evaluate_postfix("34*2/")).must_equal 6 expect(evaluate_postfix("34-1+")).must_equal 0 diff --git a/test/queue_test.rb b/test/queue_test.rb index 9b616a30..a000463b 100644 --- a/test/queue_test.rb +++ b/test/queue_test.rb @@ -11,14 +11,12 @@ end it "adds something to an empty Queue" do - skip q = Queue.new q.enqueue(10) q.to_s.must_equal "[10]" end it "adds multiple somethings to a Queue" do - skip q = Queue.new q.enqueue(10) q.enqueue(20) @@ -27,13 +25,11 @@ end it "starts the size of a Queue at 0" do - skip q = Queue.new q.empty?.must_equal true end it "removes something from the Queue" do - skip q = Queue.new q.enqueue(5) removed = q.dequeue @@ -42,7 +38,6 @@ end it "removes the right something (LIFO)" do - skip q = Queue.new q.enqueue(5) q.enqueue(3) @@ -53,7 +48,6 @@ end it "properly adjusts the size with enqueueing and dequeueing" do - skip q = Queue.new q.empty?.must_equal true q.enqueue(-1) @@ -65,7 +59,6 @@ end it "returns the front element in the Queue" do - skip q = Queue.new q.enqueue(40) q.enqueue(22) diff --git a/test/stack_test.rb b/test/stack_test.rb index df5046c8..2cf9d5d9 100644 --- a/test/stack_test.rb +++ b/test/stack_test.rb @@ -10,14 +10,12 @@ end it "pushes something onto a empty Stack" do - skip s = Stack.new s.push(10) s.to_s.must_equal "[10]" end it "pushes multiple somethings onto a Stack" do - skip s = Stack.new s.push(10) s.push(20) @@ -26,13 +24,11 @@ end it "starts the stack empty" do - skip s = Stack.new s.empty?.must_equal true end it "removes something from the stack" do - skip s = Stack.new s.push(5) removed = s.pop @@ -41,7 +37,6 @@ end it "removes the right something (LIFO)" do - skip s = Stack.new s.push(5) s.push(3)