From ae7a3a8bbb545e4fad8ab1db2f4690eeb9b21d68 Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 19:34:12 -0700 Subject: [PATCH 1/9] Filled out Stack class, pass tests --- lib/stack.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..69aba34a 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,21 @@ +require_relative './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? + popped = @store.remove_last end def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end def to_s From 1548e464225931da050786dad57553de91ccf293 Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 19:51:33 -0700 Subject: [PATCH 2/9] Passing some tests --- lib/queue.rb | 30 +++++++++++++++++++++++------- lib/stack.rb | 2 +- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..24aac7b2 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,28 +1,44 @@ class Queue + # attr_reader :front, :size def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new + @size = 20 + @front = 0 + @back = 0 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if @front == (@back + 1) % @size + raise Error.new("Queue is full") + else + @store[@back] = element + @back = (@back + 1) % @size + end end def dequeue - raise NotImplementedError, "Not yet implemented" + return nil if self.empty? + + element = @store[@first] + # @store[@first] = nil + @front = (@front + 1) % size + @last = (@last - 1) % @size + return element end + + #can be reduced to attr_reader??? maybe def front - raise NotImplementedError, "Not yet implemented" + return @front end def size - raise NotImplementedError, "Not yet implemented" + return @size end def empty? - raise NotImplementedError, "Not yet implemented" + return @front == @back end def to_s diff --git a/lib/stack.rb b/lib/stack.rb index 69aba34a..d0314d43 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -11,7 +11,7 @@ def push(element) def pop return nil if self.empty? - popped = @store.remove_last + element = @store.remove_last end def empty? From 199e825eccdbfd4c5138890de9fc0084de878c4e Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 19:58:08 -0700 Subject: [PATCH 3/9] Uncommented code and passing more queue tests --- lib/queue.rb | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 24aac7b2..3ee3a07b 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,19 +1,19 @@ class Queue - # attr_reader :front, :size + # attr_reader :first, :size def initialize @store = Array.new @size = 20 - @front = 0 - @back = 0 + @first = 0 + @last = 0 end def enqueue(element) - if @front == (@back + 1) % @size + if @first == (@last + 1) % @size raise Error.new("Queue is full") else - @store[@back] = element - @back = (@back + 1) % @size + @store[@last] = element + @last = (@last + 1) % @size end end @@ -21,16 +21,17 @@ def dequeue return nil if self.empty? element = @store[@first] - # @store[@first] = nil - @front = (@front + 1) % size + @store[@first] = nil + @first = (@first + 1) % size @last = (@last - 1) % @size return element + end #can be reduced to attr_reader??? maybe - def front - return @front + def first + @store[@first] end def size @@ -38,7 +39,7 @@ def size end def empty? - return @front == @back + return @first == @last end def to_s From 4812b349ce25f20ad19b317febf0e1e632474fc0 Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 19:59:51 -0700 Subject: [PATCH 4/9] Realized the error of my ways --- lib/queue.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 3ee3a07b..260d6e94 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -21,11 +21,10 @@ def dequeue return nil if self.empty? element = @store[@first] - @store[@first] = nil + # @store[@first] = nil @first = (@first + 1) % size - @last = (@last - 1) % @size - return element + return element end From 4ce7855c09b62ddba7da7dcd8c82574e622dbf9a Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 20:21:13 -0700 Subject: [PATCH 5/9] Implementing to_s --- lib/queue.rb | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 260d6e94..7dac6509 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,6 +1,4 @@ class Queue - # attr_reader :first, :size - def initialize @store = Array.new @size = 20 @@ -9,26 +7,21 @@ def initialize end def enqueue(element) - if @first == (@last + 1) % @size - raise Error.new("Queue is full") - else - @store[@last] = element - @last = (@last + 1) % @size - end + return nil if @first == (@last + 1) % @size + + @store[@last] = element + @last = (@last + 1) % @size end def dequeue return nil if self.empty? element = @store[@first] - # @store[@first] = nil @first = (@first + 1) % size return element end - - #can be reduced to attr_reader??? maybe def first @store[@first] end @@ -42,6 +35,16 @@ def empty? end def to_s - return @store.to_s + return nil if self.empty? + + string_queue = Array.new + current_element = @first + + while current_element < @last + string_queue << @store[current_element] + current_element = (current_element + 1) % @size + end + + return string_queue.to_s end end From 2fb3a1ccbd102f9ea0aa355b85081d30b6b95f27 Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 20:21:33 -0700 Subject: [PATCH 6/9] Fixed --- lib/queue.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/queue.rb b/lib/queue.rb index 7dac6509..8eb047e7 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -40,7 +40,7 @@ def to_s string_queue = Array.new current_element = @first - while current_element < @last + until current_element == @last string_queue << @store[current_element] current_element = (current_element + 1) % @size end From ce56f712e7c715dcfbd8a3182e780e2d2caa789e Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 20:23:03 -0700 Subject: [PATCH 7/9] Commented out wave 4 --- lib/problems.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..981477f5 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -3,11 +3,11 @@ # Time Complexity: ? # Space Complexity: ? def balanced(string) - raise NotImplementedError, "Not implemented yet" + end # Time Complexity: ? # Space Complexity: ? -def evaluate_postfix(postfix_expression) - raise NotImplementedError, "Not implemented yet" -end +# def evaluate_postfix(postfix_expression) +# raise NotImplementedError, "Not implemented yet" +# end From bc6fc4593b5b385c2670ac6f2c4ac79f02c16f23 Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 20:44:43 -0700 Subject: [PATCH 8/9] Began balanced method, pass some tests --- lib/problems.rb | 20 ++++++++++++++++++-- test/problems_test.rb | 4 ++-- test/test_helper.rb | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index 981477f5..823583be 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -1,9 +1,25 @@ require_relative './stack.rb' -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) +# Space Complexity: O(n) def balanced(string) + return false if string.length % 2 != 0 + struct = Stack.new + left_half = ["(", "[", "{"] + right_half = [")", "]", "}"] + + left = 0 + right = string.length - 1 + until left >= right + index = left_half.find_index { |el| el == string[left] } + + return false if string[right] != right_half[index] + left += 1 + right -= 1 + end + + true end # Time Complexity: ? diff --git a/test/problems_test.rb b/test/problems_test.rb index 046f059e..694262b8 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 @@ -33,7 +33,7 @@ end end - describe "postfix" do + xdescribe "postfix" do it "can add a 2 numbers together" do expect(evaluate_postfix("34+")).must_equal 7 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 From 68cec8c5f39bd35f72d998d8eaf829cc64e2a6c1 Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 14 Sep 2020 20:52:57 -0700 Subject: [PATCH 9/9] Solved balanced and pass tests --- lib/problems.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/problems.rb b/lib/problems.rb index 823583be..9f2d528c 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -14,7 +14,10 @@ def balanced(string) until left >= right index = left_half.find_index { |el| el == string[left] } - return false if string[right] != right_half[index] + if !index.nil? && string[right] != right_half[index] + return false if string[left + 1] != right_half[index] + end + left += 1 right -= 1 end