From 29d521e436660c2d425b2ad0dbf0bc4475098e1c Mon Sep 17 00:00:00 2001 From: Diana Date: Sun, 17 Nov 2019 17:01:17 -0800 Subject: [PATCH 1/3] passing fibonacci method tests --- lib/fibonacci.rb | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/fibonacci.rb b/lib/fibonacci.rb index 7465c25..b7fe69e 100644 --- a/lib/fibonacci.rb +++ b/lib/fibonacci.rb @@ -1,8 +1,22 @@ # Improved Fibonacci -# Time Complexity - ? -# Space Complexity - ? (should be O(n)) +# Time Complexity - O(n) +# Space Complexity - O(n) # Hint, you may want a recursive helper method def fibonacci(n) - + return fib_helper(n) end + +def fib_helper(n, solutions = [0,1], current = 2) + if n < 0 + raise ArgumentError + elsif n == 0 || n == 1 + return n + elsif n == current + return solutions[n - 1] + solutions[n - 2] + end + + solutions << solutions[current - 1] + solutions[current - 2] + return fib_helper(n, solutions, current + 1) +end + From 8dd80729b577dbb92ff82793391a768bf56d5f77 Mon Sep 17 00:00:00 2001 From: Diana Date: Sun, 17 Nov 2019 19:34:50 -0800 Subject: [PATCH 2/3] passed superdigit tests, will try to return later for refined superdigit method --- lib/super_digit.rb | 21 +++++++++++++++------ test/super_digit_test.rb | 4 ++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/super_digit.rb b/lib/super_digit.rb index 33e367f..ceedeb0 100644 --- a/lib/super_digit.rb +++ b/lib/super_digit.rb @@ -1,15 +1,24 @@ # Superdigit -# Time Complexity - ? -# Space Complexity - ? +# Time Complexity - O(n) +# Space Complexity - O(n) def super_digit(n) - + return n if n.to_s.length == 1 + + return super_digit(digit_helper(n)) end +def digit_helper(n) + digits = n.to_s.split("") + result = digits.map {|element| element.to_i} + return result.sum +end + + # Time Complexity - ? # Space Complexity - ? -def refined_super_digit(n, k) - -end +# def refined_super_digit(n, k) + +# end \ No newline at end of file diff --git a/test/super_digit_test.rb b/test/super_digit_test.rb index 60da3a1..20973f1 100644 --- a/test/super_digit_test.rb +++ b/test/super_digit_test.rb @@ -1,6 +1,6 @@ require_relative "test_helper" -xdescribe "super_digit" do +describe "super_digit" do it "will return 2 for super_digit(9875)" do # Act answer = super_digit(9875) @@ -33,7 +33,7 @@ expect(answer).must_equal 6 end - describe "refined superdigit" do + xdescribe "refined superdigit" do it "will return 1 for n = 1 and k = 1" do # Act answer = refined_super_digit(1, 1) From 704ee96ccd1704b5b353c1c2e440a50f3cbbbf3a Mon Sep 17 00:00:00 2001 From: Diana Date: Sun, 17 Nov 2019 19:40:45 -0800 Subject: [PATCH 3/3] refactored fibonacci code --- lib/fibonacci.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/fibonacci.rb b/lib/fibonacci.rb index b7fe69e..8950edf 100644 --- a/lib/fibonacci.rb +++ b/lib/fibonacci.rb @@ -4,19 +4,22 @@ # Space Complexity - O(n) # Hint, you may want a recursive helper method def fibonacci(n) - return fib_helper(n) -end - -def fib_helper(n, solutions = [0,1], current = 2) if n < 0 raise ArgumentError elsif n == 0 || n == 1 return n - elsif n == current + end + + return fib_helper(n) +end + +def fib_helper(n, solutions = [0,1], current = 2) + if n == current return solutions[n - 1] + solutions[n - 2] end solutions << solutions[current - 1] + solutions[current - 2] + return fib_helper(n, solutions, current + 1) end