From 03218f885da2f6f247c021d38f547fe4010e8843 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Sat, 5 Sep 2020 20:52:35 -0700 Subject: [PATCH 1/3] WAVE 1 --- lib/stack.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..8722c0f6 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,22 @@ 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" + return nil if @store.empty? + + item = @store.remove_first + + return item end def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end def to_s From ffeb00bda41ce589a38f33617628b38ca880b01e Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Tue, 8 Sep 2020 20:11:32 -0700 Subject: [PATCH 2/3] queue --- lib/problems.rb | 18 +++++++++++++--- lib/queue.rb | 55 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..edbd1846 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -1,9 +1,21 @@ require_relative './stack.rb' -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) +# Space Complexity: O(n) def balanced(string) - raise NotImplementedError, "Not implemented yet" + return false if string.length.odd? + stack = [] + brackets = { '{' => '}', '[' => ']', '(' => ')' } + + s.each_char do |char| + if brackets.key?(char) + stack.push(char) + elsif brackets.values.include?(char) + return false if brackets.key(char) != stack.pop + end + end + stack.empty? + end end # Time Complexity: ? diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..9408230e 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,64 @@ class Queue def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @size = 20 + @store = Array.new(@size) + @front, @rear = -1, -1 end - def enqueue(element) - raise NotImplementedError, "Not yet implemented" + def enqueue(element) #move back to the next free position + if @front == -1 && @rear -1 #first time + @front = 0 + @rear = 1 + @store[@front] = element + return element + end + + if @front == (@rear + 1) % @size #check if is full + return nil + else + @store[@rear] = element #when not full add to the back + @rear = (@rear + 1) % @size #keeping track of the next free index + end end - def dequeue - raise NotImplementedError, "Not yet implemented" + def dequeue #move front one position clockwise + if @front == -1 && @rear == -1 #first time + return nil + end + + #remove first element + element = @store[@front] + @front = (@front + 1) % @size + #after removing check if queue is empty to set front and back -1 + if @front == @rear + @front, @rear = -1, -1 + end + return element end def front - raise NotImplementedError, "Not yet implemented" + return nil if @front == @rear + return @store[@front] end def size - raise NotImplementedError, "Not yet implemented" + return 0 if @front == @rear #empty + return @rear - @front + 1 if @rear > @front # @back ahead of @front + return (@size - @front) + (@rear + 1) end def empty? - raise NotImplementedError, "Not yet implemented" + return @front == @rear end def to_s - return @store.to_s + return '[]' if @front == @rear + if @rear > @front + return @store[@front..@rear - 1].to_s + else + return (@store[@front..@size - 1] + @store[0..@rear - 1]).to_s + end + end -end +end \ No newline at end of file From e22c3e6fd67d15771b8b2b69915b7d9bff5f1c85 Mon Sep 17 00:00:00 2001 From: Sara Nilsen Date: Tue, 8 Sep 2020 20:21:39 -0700 Subject: [PATCH 3/3] balanced --- lib/problems.rb | 28 +++++++++++++++------------- test/problems_test.rb | 34 +++++++++++++++++----------------- test/test_helper.rb | 3 ++- 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index edbd1846..1aa5422c 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -5,21 +5,23 @@ def balanced(string) return false if string.length.odd? stack = [] - brackets = { '{' => '}', '[' => ']', '(' => ')' } + brackets = { '{' => '}', '[' => ']', '(' => ')' } - s.each_char do |char| - if brackets.key?(char) - stack.push(char) - elsif brackets.values.include?(char) - return false if brackets.key(char) != stack.pop - end + string.each_char do |char| + if brackets.key?(char) + stack.push(char) + elsif brackets.values.include?(char) + return false if brackets.key(char) != stack.pop end - stack.empty? end -end -# Time Complexity: ? -# Space Complexity: ? -def evaluate_postfix(postfix_expression) - raise NotImplementedError, "Not implemented yet" + if stack.empty? + return true + end end + +# # Time Complexity: ? +# # Space Complexity: ? +# def evaluate_postfix(postfix_expression) +# raise NotImplementedError, "Not implemented yet" +# end diff --git a/test/problems_test.rb b/test/problems_test.rb index 046f059e..2ecb18d8 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,23 +33,23 @@ end end - describe "postfix" do - it "can add a 2 numbers together" do + # xdescribe "postfix" do + # it "can add a 2 numbers together" do - expect(evaluate_postfix("34+")).must_equal 7 - expect(evaluate_postfix("34*")).must_equal 12 - expect(evaluate_postfix("34-")).must_equal(-1) - expect(evaluate_postfix("34/")).must_equal 0 - end + # expect(evaluate_postfix("34+")).must_equal 7 + # expect(evaluate_postfix("34*")).must_equal 12 + # expect(evaluate_postfix("34-")).must_equal(-1) + # expect(evaluate_postfix("34/")).must_equal 0 + # end - it "can add a evaluate a more complicated expression" do + # it "can add a evaluate a more complicated expression" do - expect(evaluate_postfix("34+2*")).must_equal 14 - expect(evaluate_postfix("34*2/")).must_equal 6 - expect(evaluate_postfix("34-1+")).must_equal 0 - expect(evaluate_postfix("34/7-")).must_equal(-7) - expect(evaluate_postfix("35+6*")).must_equal 48 - expect(evaluate_postfix("62/5+")).must_equal 8 - end - end + # expect(evaluate_postfix("34+2*")).must_equal 14 + # expect(evaluate_postfix("34*2/")).must_equal 6 + # expect(evaluate_postfix("34-1+")).must_equal 0 + # expect(evaluate_postfix("34/7-")).must_equal(-7) + # expect(evaluate_postfix("35+6*")).must_equal 48 + # expect(evaluate_postfix("62/5+")).must_equal 8 + # end + # end end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 426168c8..57b22538 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -9,5 +9,6 @@ require_relative "../lib/linked_list.rb" 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