From 67e8096b829a1cda5c0e32137302838308245117 Mon Sep 17 00:00:00 2001 From: Ana Date: Sat, 5 Dec 2020 20:00:47 -0800 Subject: [PATCH 1/2] added Factorial, Reverse, Reverse in place, Bunny and palindrome --- .idea/.gitignore | 6 +++ .idea/.rakeTasks | 7 +++ .idea/inspectionProfiles/Project_Default.xml | 6 +++ .idea/misc.xml | 4 ++ .idea/modules.xml | 8 ++++ .idea/recursion-writing.iml | 27 +++++++++++ .idea/vcs.xml | 6 +++ Gemfile.lock | 36 +++++++++++++++ lib/recursive-methods.rb | 48 +++++++++++++++----- 9 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/.rakeTasks create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/recursion-writing.iml create mode 100644 .idea/vcs.xml create mode 100644 Gemfile.lock diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..8bf4d45 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,6 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.rakeTasks b/.idea/.rakeTasks new file mode 100644 index 0000000..e409da2 --- /dev/null +++ b/.idea/.rakeTasks @@ -0,0 +1,7 @@ + + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..b0db9b0 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..510e7fc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..8457255 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/recursion-writing.iml b/.idea/recursion-writing.iml new file mode 100644 index 0000000..a1a27da --- /dev/null +++ b/.idea/recursion-writing.iml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..630ea95 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,36 @@ +GEM + remote: https://rubygems.org/ + specs: + ansi (1.5.0) + builder (3.2.4) + coderay (1.1.3) + method_source (1.0.0) + minitest (5.14.2) + minitest-reporters (1.4.2) + ansi + builder + minitest (>= 5.0) + ruby-progressbar + minitest-skip (0.0.3) + minitest (~> 5.0) + minitest-spec (0.0.2.1) + minitest (>= 3.0) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) + rake (13.0.1) + ruby-progressbar (1.10.1) + +PLATFORMS + ruby + +DEPENDENCIES + minitest + minitest-reporters + minitest-skip + minitest-spec + pry + rake + +BUNDLED WITH + 2.1.4 diff --git a/lib/recursive-methods.rb b/lib/recursive-methods.rb index fbf6faa..daa97a1 100644 --- a/lib/recursive-methods.rb +++ b/lib/recursive-methods.rb @@ -1,15 +1,27 @@ # Authoring recursive algorithms. Add comments including time and space complexity for each method. -# Time complexity: ? -# Space complexity: ? +# Time complexity: o(n) +# Space complexity: o(n) def factorial(n) - raise NotImplementedError, "Method not implemented" + + if n == 0 || n == 1 + return 1 + elsif n < 0 + raise ArgumentError, " Enter a number greater than 0." + else + return n * factorial(n - 1) + end end -# Time complexity: ? -# Space complexity: ? +# Time complexity: o(n) - N being the lenght of string +# Space complexity: o(n) - we would need n amount of space for each character in string def reverse(s) - raise NotImplementedError, "Method not implemented" + if s.length <= 1 + return s + else + return reverse(s[1..-1]) + s[0] + end + end # Time complexity: ? @@ -18,10 +30,16 @@ def reverse_inplace(s) raise NotImplementedError, "Method not implemented" end -# Time complexity: ? -# Space complexity: ? +# Time complexity: o(n) +# Space complexity: o(n def bunny(n) - raise NotImplementedError, "Method not implemented" + return n if n == 0 + + if n == 1 + return 2 + else + return 2 + bunny(n - 1) + end end # Time complexity: ? @@ -36,10 +54,16 @@ def search(array, value) raise NotImplementedError, "Method not implemented" end -# Time complexity: ? -# Space complexity: ? +# Time complexity: o(n) +# Space complexity: o(n) def is_palindrome(s) - raise NotImplementedError, "Method not implemented" + if s.length <= 1 + return true + elsif s[0] != s[-1] + return false + else + return is_palindrome(s[1..-2]) + end end # Time complexity: ? From a512829630dc05f02316a2ecc46e707b98172438 Mon Sep 17 00:00:00 2001 From: Ana Date: Sat, 5 Dec 2020 20:05:36 -0800 Subject: [PATCH 2/2] finished writing methods, tests passing --- lib/recursive-methods.rb | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/lib/recursive-methods.rb b/lib/recursive-methods.rb index daa97a1..2487501 100644 --- a/lib/recursive-methods.rb +++ b/lib/recursive-methods.rb @@ -13,7 +13,7 @@ def factorial(n) end end -# Time complexity: o(n) - N being the lenght of string +# Time complexity: o(n) - N being the length of string # Space complexity: o(n) - we would need n amount of space for each character in string def reverse(s) if s.length <= 1 @@ -24,10 +24,14 @@ def reverse(s) end -# Time complexity: ? -# Space complexity: ? +# Time complexity: o(n) - n being how long the string is +# Space complexity: o(n) - n ammout of space for each char in string def reverse_inplace(s) - raise NotImplementedError, "Method not implemented" + if s.length <= 1 + return s + else + return s[-1] + reverse(s[1..-2]) + s[0] + end end # Time complexity: o(n) @@ -48,10 +52,16 @@ def nested(s) raise NotImplementedError, "Method not implemented" end -# Time complexity: ? -# Space complexity: ? +# Time complexity: o(n) +# Space complexity: o(n) def search(array, value) - raise NotImplementedError, "Method not implemented" + if array.length == 0 + return false + elsif array[0] == value + return true + else + return search(array[1..-1], value) + end end # Time complexity: o(n) @@ -66,8 +76,16 @@ def is_palindrome(s) end end -# Time complexity: ? -# Space complexity: ? +# Time complexity: o(n) +# Space complexity: o(n) def digit_match(n, m) - raise NotImplementedError, "Method not implemented" + n = n.to_s + m = m.to_s + if n.length == 0 || m.length == 0 + return 0 + elsif n[-1] == m[-1] + return 1 + digit_match(n[0..-2], m[0..-2]) + else + return digit_match(n[0..-2], m[0..-2]) + end end \ No newline at end of file