From 27172af6787378ad45a9362f202b497cdb4b0624 Mon Sep 17 00:00:00 2001 From: Julia Bouvier Date: Mon, 2 Mar 2020 16:38:50 -0800 Subject: [PATCH 1/5] Implemented queue --- lib/queue.rb | 40 +++++++++++++++++++++++++++++++++------- test/queue_test.rb | 10 +--------- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..f921aa47 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,57 @@ class Queue def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new(30) + @front = @back = -1 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if @front == -1 && @back == -1 + @front = 0 + @back = 0 + end + + if ((@back + 1) % @store.length) == @front + raise ArgumentError.new "Queue is full" + end + + @store[@back] = element + @back = (@back + 1) % @store.length end def dequeue - raise NotImplementedError, "Not yet implemented" + if @front == @back + raise ArgumentError.new "Queue is full" + end + + temp = @store[@front] + @store[@front] = nil + @front = (@front + 1) % @store.length + return temp end def front - raise NotImplementedError, "Not yet implemented" + return @store[@front] end def size - raise NotImplementedError, "Not yet implemented" + if @back.length > @front.length + return @back.length - @front.length + else + return @front.length - @back.length + end end def empty? - raise NotImplementedError, "Not yet implemented" + @front == @back? true : false end def to_s + if @front < @back + @store = @store[@front...@back] + elsif @front != @back + @store = @store[@back..-1] + @store[@front...@back] + end return @store.to_s end end diff --git a/test/queue_test.rb b/test/queue_test.rb index 8a7dcd9c..6ba1af43 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) @@ -92,7 +85,6 @@ q.enqueue(130) q.enqueue(140) q.enqueue(150) - q.enqueue(150) q.enqueue(160) q.enqueue(170) q.enqueue(180) @@ -101,6 +93,6 @@ q.enqueue(210) q.dequeue - expect(q.to_s).must_equal('[40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240]') + expect(q.to_s).must_equal('[40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210]') end end From 1c2c8ad2f8af8075b41963f5c42261b2aef3f3bc Mon Sep 17 00:00:00 2001 From: Julia Bouvier Date: Mon, 2 Mar 2020 16:52:32 -0800 Subject: [PATCH 2/5] Implemented stack --- lib/stack.rb | 13 ++++++++----- test/stack_test.rb | 5 ----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..8d4ddc9d 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,22 @@ +require '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) + return @store end def pop - raise NotImplementedError, "Not yet implemented" + return nil if @store.get_first.nil? + return @store.remove_last end def empty? - raise NotImplementedError, "Not yet implemented" + return true if @store.get_first.nil? end def to_s 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) From 8d026e71a66c1189520f6db7bbde93e358fd644f Mon Sep 17 00:00:00 2001 From: Julia Bouvier Date: Mon, 2 Mar 2020 19:22:46 -0800 Subject: [PATCH 3/5] Implemented balanced method --- lib/problems.rb | 32 ++++++++++++++++++++++++++++++-- test/problems_test.rb | 5 ----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..51d2c610 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -3,11 +3,39 @@ # Time Complexity: ? # Space Complexity: ? def balanced(string) - raise NotImplementedError, "Not implemented yet" + stack = Stack.new + pairs = { + ')'=> '(', + '}'=> '{', + ']'=> '[' + } + + string.each_char do |char| + if pairs.values.include?(char) + stack.push(char) + else + return false if stack.empty? + removed = stack.pop + return false unless removed == pairs[char] + end + end + + stack.empty? ? true : false end # Time Complexity: ? # Space Complexity: ? def evaluate_postfix(postfix_expression) - raise NotImplementedError, "Not implemented yet" + stack = Stack.new + operators = { + "*" => :*, + "/" => :/, + "+" => :+, + "-" => :-, + "%" => :%, + } + + postfix_expression.each_char do |char| + + end end diff --git a/test/problems_test.rb b/test/problems_test.rb index f851f1d2..546fff53 100644 --- a/test/problems_test.rb +++ b/test/problems_test.rb @@ -7,30 +7,25 @@ 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 it "also works if the string has opens and closes in the beginning and end" do - skip expect(balanced('[]()')).must_equal true end end From f31bae9af845ab807d2c5d383bb52d283063142b Mon Sep 17 00:00:00 2001 From: Julia Bouvier Date: Mon, 2 Mar 2020 19:33:33 -0800 Subject: [PATCH 4/5] Implemented balanced method --- lib/problems.rb | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index 51d2c610..889434d1 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -26,16 +26,5 @@ def balanced(string) # Time Complexity: ? # Space Complexity: ? def evaluate_postfix(postfix_expression) - stack = Stack.new - operators = { - "*" => :*, - "/" => :/, - "+" => :+, - "-" => :-, - "%" => :%, - } - - postfix_expression.each_char do |char| - - end + raise NotImplementedError, "Not implemented yet" end From 371c6e615d1e7f7e746bc00b82b8cd8c1a087113 Mon Sep 17 00:00:00 2001 From: Julia Bouvier Date: Tue, 3 Mar 2020 10:39:24 -0800 Subject: [PATCH 5/5] Fixed indentation --- lib/problems.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index 889434d1..1aac764a 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -14,9 +14,9 @@ def balanced(string) if pairs.values.include?(char) stack.push(char) else - return false if stack.empty? - removed = stack.pop - return false unless removed == pairs[char] + return false if stack.empty? + removed = stack.pop + return false unless removed == pairs[char] end end