From 35fae60f64dd1e5584aa30b282cc560971502d6d Mon Sep 17 00:00:00 2001 From: Angela Date: Fri, 24 May 2019 13:32:35 -0700 Subject: [PATCH 1/3] attempting recursion --- lib/recursive-methods.rb | 58 ++++++++++++++++++++++---- specs/recursion_writing_spec.rb | 74 ++++++++++++++++----------------- 2 files changed, 85 insertions(+), 47 deletions(-) diff --git a/lib/recursive-methods.rb b/lib/recursive-methods.rb index fbf6faa..2749b1a 100644 --- a/lib/recursive-methods.rb +++ b/lib/recursive-methods.rb @@ -3,47 +3,87 @@ # Time complexity: ? # Space complexity: ? def factorial(n) - raise NotImplementedError, "Method not implemented" + if n < 0 + raise ArgumentError, "Error!!" + end + + if n == 0 || n == 1 + return 1 + else + return n * factorial(n - 1) + end end # Time complexity: ? # Space complexity: ? def reverse(s) - raise NotImplementedError, "Method not implemented" + if s.length == 0 + return s + else + return s[-1] + reverse(s[0...-1]) + end end # Time complexity: ? # Space complexity: ? def reverse_inplace(s) - raise NotImplementedError, "Method not implemented" + if s.length == 0 + return s + else + return s[-1] + reverse(s[0...-1]) + end end # Time complexity: ? # Space complexity: ? def bunny(n) - raise NotImplementedError, "Method not implemented" + if n == 0 + return 0 + else + return 2 + bunny(n - 1) + end end +# NOT WORKINGGGG!!! Can I get feedback on why this is looping infinitedly (I think?)? Thank you! # Time complexity: ? # Space complexity: ? def nested(s) - raise NotImplementedError, "Method not implemented" + if s.length == 0 + return true + elsif s.length == 1 + return false + end + + if find_pair(s) + return nested(s.slice!(find_pair(s), 2)) + end +end + +def find_pair(s) + i = 0 + while i < s.length + if s[i] == "(" && s[i + 1] == ")" + return i + end + i += 1 + end + return nil end # Time complexity: ? # Space complexity: ? def search(array, value) - raise NotImplementedError, "Method not implemented" + raise NotImplementedError, "Method not implemented" end # Time complexity: ? # Space complexity: ? def is_palindrome(s) - raise NotImplementedError, "Method not implemented" + raise NotImplementedError, "Method not implemented" end # Time complexity: ? # Space complexity: ? def digit_match(n, m) - raise NotImplementedError, "Method not implemented" -end \ No newline at end of file + raise NotImplementedError, "Method not implemented" +end diff --git a/specs/recursion_writing_spec.rb b/specs/recursion_writing_spec.rb index d8fb1ed..9520eb1 100644 --- a/specs/recursion_writing_spec.rb +++ b/specs/recursion_writing_spec.rb @@ -1,7 +1,7 @@ -require 'minitest/autorun' -require 'minitest/reporters' +require "minitest/autorun" +require "minitest/reporters" require "minitest/skip_dsl" -require_relative '../lib/recursive-methods' +require_relative "../lib/recursive-methods" describe "factorial" do it "will find the factorial of 0" do @@ -23,8 +23,7 @@ answer = factorial(num) # Assert - expect(answer).must_equal 5*4*3*2*1 - + expect(answer).must_equal 5 * 4 * 3 * 2 * 1 end it "will raise an ArgumentError if given a number not >= 0" do @@ -38,7 +37,7 @@ end end -xdescribe "reverse" do +describe "reverse" do it "will reverse 'cat'" do # Arrange string = "cat" @@ -83,8 +82,7 @@ end end - -xdescribe "reverse_in_place" do +describe "reverse_in_place" do it "will reverse 'cat'" do # Arrange string = "cat" @@ -129,7 +127,7 @@ end end -xdescribe "bunny" do +describe "bunny" do it "returns 0 for 0 bunnies" do # Arrange count = 0 @@ -224,40 +222,40 @@ end it "will return true when looking for something in the array" do - # Arrange - item = "a" - array = ["b", "c", "a"] + # Arrange + item = "a" + array = ["b", "c", "a"] - # Act - answer = search(array, item) + # Act + answer = search(array, item) - # Assert - expect(answer).must_equal true + # Assert + expect(answer).must_equal true end it "will return false when looking for something not in the array" do # Arrange item = "x" array = ["b", "c", "a"] - + # Act answer = search(array, item) - + # Assert expect(answer).must_equal false - end - - it "will return true when finding something at the front of the array" do - # Arrange - item = "b" - array = ["b", "c", "a"] - - # Act - answer = search(array, item) - - # Assert - expect(answer).must_equal true - end + end + + it "will return true when finding something at the front of the array" do + # Arrange + item = "b" + array = ["b", "c", "a"] + + # Act + answer = search(array, item) + + # Assert + expect(answer).must_equal true + end end xdescribe "is_palindrome" do @@ -304,8 +302,8 @@ # Act answer = digit_match(num1, num2) - # Assert - expect(answer).must_equal 4 + # Assert + expect(answer).must_equal 4 end it "returns 0 for nonmatching numbers" do @@ -316,8 +314,8 @@ # Act answer = digit_match(num1, num2) - # Assert - expect(answer).must_equal 0 + # Assert + expect(answer).must_equal 0 end it "returns 3 for 841 and 62530841" do @@ -328,7 +326,7 @@ # Act answer = digit_match(num1, num2) - # Assert - expect(answer).must_equal 3 + # Assert + expect(answer).must_equal 3 end -end \ No newline at end of file +end From a31eaddb9ffdef2593c8c0f540aa6b1e6df1cb38 Mon Sep 17 00:00:00 2001 From: Angela Date: Wed, 29 May 2019 08:51:52 -0700 Subject: [PATCH 2/3] fixed parens --- lib/recursive-methods.rb | 5 +++-- specs/recursion_writing_spec.rb | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/recursive-methods.rb b/lib/recursive-methods.rb index 2749b1a..1e6baad 100644 --- a/lib/recursive-methods.rb +++ b/lib/recursive-methods.rb @@ -50,12 +50,13 @@ def bunny(n) def nested(s) if s.length == 0 return true - elsif s.length == 1 + elsif find_pair(s).nil? return false end if find_pair(s) - return nested(s.slice!(find_pair(s), 2)) + s.slice!(find_pair(s), 2) + return nested(s) end end diff --git a/specs/recursion_writing_spec.rb b/specs/recursion_writing_spec.rb index 9520eb1..2b04432 100644 --- a/specs/recursion_writing_spec.rb +++ b/specs/recursion_writing_spec.rb @@ -162,7 +162,7 @@ end end -xdescribe "nested" do +describe "nested" do it "will return true for empystring" do # Arrange string = "" From 9a7ae3e8ab43e1b1820490bdf0add94b8b228ea9 Mon Sep 17 00:00:00 2001 From: Angela Date: Wed, 29 May 2019 08:56:24 -0700 Subject: [PATCH 3/3] added time/space complexity --- lib/recursive-methods.rb | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/recursive-methods.rb b/lib/recursive-methods.rb index 1e6baad..64522e7 100644 --- a/lib/recursive-methods.rb +++ b/lib/recursive-methods.rb @@ -1,7 +1,7 @@ # Authoring recursive algorithms. Add comments including time and space complexity for each method. -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(nlogn) +# Space complexity: O(nlogn) def factorial(n) if n < 0 raise ArgumentError, "Error!!" @@ -14,8 +14,8 @@ def factorial(n) end end -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n) +# Space complexity: O(n) def reverse(s) if s.length == 0 return s @@ -24,8 +24,8 @@ def reverse(s) end end -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n) +# Space complexity: O(n) def reverse_inplace(s) if s.length == 0 return s @@ -34,8 +34,8 @@ def reverse_inplace(s) end end -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n) +# Space complexity: O(n) def bunny(n) if n == 0 return 0 @@ -44,9 +44,8 @@ def bunny(n) end end -# NOT WORKINGGGG!!! Can I get feedback on why this is looping infinitedly (I think?)? Thank you! -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n) +# Space complexity: O(n) def nested(s) if s.length == 0 return true