From d651453da8d3fd2390812c09ff4e5b1285dd98b2 Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 16:58:30 -0700 Subject: [PATCH 1/8] finalized wave 1: stack methods --- lib/stack.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..58fe83cf 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,20 @@ 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? + @store.remove_first end def empty? - raise NotImplementedError, "Not yet implemented" + return true if @store.empty? + return false end def to_s From 8bcf829df0df95316e70b155348a6751a33eee9d Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Tue, 20 Apr 2021 20:36:03 -0700 Subject: [PATCH 2/8] finalized wave 2 --- lib/queue.rb | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..6bbd3be1 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,57 @@ class Queue + Array_Length = 20 def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new(Array_Length) + @front = @back = 0 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if @front.nil? + @front = @back = 0 + elsif (@front - @back == 1) || (@back - @front == Array_Length - 1) + raise ArgumentError, 'Queue is full' + end + + @store[@back] = element + @back = (@back + 1) % Array_Length end def dequeue - raise NotImplementedError, "Not yet implemented" + if @front == @back || @front.nil? + raise ArgumentError, 'Queue is empty' + end + + temp = @store[@front] + @front = (@front + 1) % Array_Length + return temp end def front - raise NotImplementedError, "Not yet implemented" + return @store[@front] end def size - raise NotImplementedError, "Not yet implemented" + return 0 if @front == -1 + if @front < @back + @back - @front + 1 + else + Array_Length - @front + @back + end end def empty? - raise NotImplementedError, "Not yet implemented" + return @front.nil? || @front == @back end def to_s - return @store.to_s + results = [] + if @back >= @front + results = @store[@front...@back] + else + results = @store[@front...Array_Length] + (@store[0...@back]) + end + return results.to_s end + end From 244dade587d34b739c5a40f7ccb7b590a0d483ca Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Tue, 20 Apr 2021 20:37:18 -0700 Subject: [PATCH 3/8] small changes --- lib/queue.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/queue.rb b/lib/queue.rb index 6bbd3be1..b19ba37e 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -41,7 +41,11 @@ def size end def empty? - return @front.nil? || @front == @back + if @front.nil? || @front == @back + return true + else + return false + end end def to_s From e2fdea3c8669845f761981ce7d7ce56fa5343f4c Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Tue, 5 Oct 2021 17:52:37 -0700 Subject: [PATCH 4/8] added test for queue.size --- lib/linked_list.rb | 2 +- lib/queue.rb | 16 +++++++++------- lib/stack.rb | 5 +++-- test/queue_test.rb | 9 +++++++++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/linked_list.rb b/lib/linked_list.rb index edd32b4d..a62f49ba 100644 --- a/lib/linked_list.rb +++ b/lib/linked_list.rb @@ -339,4 +339,4 @@ def to_s return list.to_s end -end +end \ No newline at end of file diff --git a/lib/queue.rb b/lib/queue.rb index b19ba37e..dc87da3a 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -3,18 +3,19 @@ class Queue def initialize @store = Array.new(Array_Length) - @front = @back = 0 + @front = @back = 0 # back is the LAST EMPTY Space at the end end def enqueue(element) if @front.nil? @front = @back = 0 - elsif (@front - @back == 1) || (@back - @front == Array_Length - 1) + elsif @front - @back == 1 || (@back - @front == Array_Length - 1) # edge case were @back and @front are in different sides of the circle raise ArgumentError, 'Queue is full' end @store[@back] = element - @back = (@back + 1) % Array_Length + @back = (@back + 1) % Array_Length # to update the back + end def dequeue @@ -32,11 +33,11 @@ def front end def size - return 0 if @front == -1 + return 0 if @front.nil? if @front < @back - @back - @front + 1 + @back - @front else - Array_Length - @front + @back + Array_Length - (@front + @back) end end @@ -53,7 +54,8 @@ def to_s if @back >= @front results = @store[@front...@back] else - results = @store[@front...Array_Length] + (@store[0...@back]) + # from beginig to end of the list + begining to @back + results = @store[@front...Array_Length] + (@store[0...@back]) end return results.to_s end diff --git a/lib/stack.rb b/lib/stack.rb index 58fe83cf..d8b3b9ed 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,6 +1,6 @@ class Stack def initialize - @store = LinkedList.new() + @store = LinkedList.new end def push(element) @@ -20,4 +20,5 @@ def empty? def to_s return @store.to_s end -end + +end \ No newline at end of file diff --git a/test/queue_test.rb b/test/queue_test.rb index 92fc11fb..a6a0b74f 100644 --- a/test/queue_test.rb +++ b/test/queue_test.rb @@ -25,6 +25,15 @@ expect(q.to_s).must_equal "[10, 20, 30]" end + it "returns the correct size of the queue" do + + q = Queue.new + q.enqueue(1) + q.enqueue(2) + q.enqueue(3) + expect(q.size).must_equal 3 + end + it "starts the Queue empty" do q = Queue.new From 89f09c766e297794f3df4220e9095b136c79c6ed Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Fri, 8 Oct 2021 13:27:49 -0700 Subject: [PATCH 5/8] completed balanced function --- lib/problems.rb | 33 +++++++++++++++++++++++++++++---- lib/queue.rb | 3 ++- test/problems_test.rb | 2 +- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..1f0f3e04 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -1,13 +1,38 @@ require_relative './stack.rb' -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) +# Space Complexity: O(n) def balanced(string) - raise NotImplementedError, "Not implemented yet" + if string.empty? + true + end + + brackets = [] + + string.each_char do |char| + if char == "{" || char == "(" || char == "[" + brackets << char + elsif char == "}" || char == ")" || char == "]" + if char == "}" && brackets[-1] == "{" + brackets.pop + elsif char == ")" && brackets[-1] == "(" + brackets.pop + elsif char == "]" && brackets[-1] == "[" + brackets.pop + else + false + end + end + end + if brackets.empty? + true + else + false + end end # Time Complexity: ? # Space Complexity: ? def evaluate_postfix(postfix_expression) raise NotImplementedError, "Not implemented yet" -end +end \ No newline at end of file diff --git a/lib/queue.rb b/lib/queue.rb index dc87da3a..e86708ef 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -59,5 +59,6 @@ def to_s end return results.to_s end - + + end diff --git a/test/problems_test.rb b/test/problems_test.rb index 046f059e..c0cfc618 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 From 1b2c3d01751e22f167ee82c13131f6c1b4f15cbf Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Fri, 8 Oct 2021 14:24:46 -0700 Subject: [PATCH 6/8] fixed problems_test --- .vscode/launch.json | 16 ++++++++++++++++ lib/problems.rb | 30 +++++++++++++++++++++++++++--- test/problems_test.rb | 1 + 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..dbfd5530 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "ruby-debug", + "request": "launch", + "name": "Launch File", + "program": "${workspaceFolder}/${command:AskForProgramName}", + "programArgs": [], + "useBundler": false + } + ] +} \ No newline at end of file diff --git a/lib/problems.rb b/lib/problems.rb index 1f0f3e04..dcaa47fa 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -7,11 +7,11 @@ def balanced(string) true end - brackets = [] + brackets = Stack.new string.each_char do |char| if char == "{" || char == "(" || char == "[" - brackets << char + brackets.push(char) elsif char == "}" || char == ")" || char == "]" if char == "}" && brackets[-1] == "{" brackets.pop @@ -34,5 +34,29 @@ def balanced(string) # Time Complexity: ? # Space Complexity: ? def evaluate_postfix(postfix_expression) - raise NotImplementedError, "Not implemented yet" + stack = [] + math = '*+/-' + + postfix_expression.each_char do |char| + if char.is_a?Integer + stack << char.to_i + elsif math.include?char + num2 = stack.pop + num1 = stack.pop + stack << calculator(num1, num2, char) + end + end + stack.pop +end + +def calculator(num1,num2,operator) + if operator == '+' + num1 + num2 + elsif operator == '-' + num1 - num2 + elsif operator == '*' + num1 * num2 + elsif operator == '/' + num1/num2 + end end \ No newline at end of file diff --git a/test/problems_test.rb b/test/problems_test.rb index c0cfc618..f28aff57 100644 --- a/test/problems_test.rb +++ b/test/problems_test.rb @@ -1,4 +1,5 @@ require_relative 'test_helper' +require_relative '../lib/problems' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From b904c45b05737f1b698b6a597a2cd821a9277a51 Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Fri, 8 Oct 2021 14:46:15 -0700 Subject: [PATCH 7/8] modified balanced --- lib/problems.rb | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index dcaa47fa..da72a4ed 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -3,32 +3,29 @@ # Time Complexity: O(n) # Space Complexity: O(n) def balanced(string) - if string.empty? - true - end + open = { + "(" => true, + "{" => true, + "[" => true + } + + close = { + ")" => "(", + "}" => "{", + "]" => "[" + } - brackets = Stack.new + results = Stack.new string.each_char do |char| - if char == "{" || char == "(" || char == "[" - brackets.push(char) - elsif char == "}" || char == ")" || char == "]" - if char == "}" && brackets[-1] == "{" - brackets.pop - elsif char == ")" && brackets[-1] == "(" - brackets.pop - elsif char == "]" && brackets[-1] == "[" - brackets.pop - else - false - end + if open[char] + results.push(char) + elsif close[char] + return false if results.pop != close[char] end end - if brackets.empty? - true - else - false - end + + results.empty? end # Time Complexity: ? From 2abaa955731f22e3d77930dda04b5f8809b0eb12 Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Fri, 8 Oct 2021 14:54:02 -0700 Subject: [PATCH 8/8] finalized postfix --- lib/problems.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/problems.rb b/lib/problems.rb index da72a4ed..7bcf1cc2 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -28,19 +28,19 @@ def balanced(string) results.empty? end -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) +# Space Complexity: O(n) def evaluate_postfix(postfix_expression) stack = [] math = '*+/-' postfix_expression.each_char do |char| - if char.is_a?Integer - stack << char.to_i - elsif math.include?char + if math.include?char num2 = stack.pop num1 = stack.pop stack << calculator(num1, num2, char) + else + stack << char.to_i end end stack.pop