diff --git a/lib/fibonacci.rb b/lib/fibonacci.rb index 7465c25..a20bd75 100644 --- a/lib/fibonacci.rb +++ b/lib/fibonacci.rb @@ -1,8 +1,29 @@ # Improved Fibonacci -# Time Complexity - ? +# Time Complexity - o(n) # Space Complexity - ? (should be O(n)) # Hint, you may want a recursive helper method def fibonacci(n) - + if n < 0 + raise ArgumentError.new + end + return fib_helper([0, 1], 2, n) +end + +def fib_helper(solutions, current, n) + if n == 0 || n == 1 + return n + end + if current == n + return solutions[n - 1] + solutions[n - 2] + end + + solutions.push(solutions[current - 1] + solutions[current - 2]) + return fib_helper(solutions, current + 1, n) + + # puts fib(3) + # puts fib(5) + # puts fib(0) + # puts fib(8) + end diff --git a/lib/super_digit.rb b/lib/super_digit.rb index 33e367f..493fdd0 100644 --- a/lib/super_digit.rb +++ b/lib/super_digit.rb @@ -1,15 +1,15 @@ # Superdigit -# Time Complexity - ? -# Space Complexity - ? +# Time Complexity - O(n) +# Space Complexity - O(n) def super_digit(n) - + if n < 10 + return n + end + return super_digit(n.digits.sum) end - # Time Complexity - ? # Space Complexity - ? 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..e811962 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) @@ -15,7 +15,7 @@ # Assert expect(answer).must_equal 5 - end + end it "will return 6 for super_digit(123)" do # Act @@ -33,13 +33,13 @@ expect(answer).must_equal 6 end - describe "refined superdigit" do + describe "refined superdigit" do it "will return 1 for n = 1 and k = 1" do # Act answer = refined_super_digit(1, 1) # Assert - expect(answer).must_equal 1 + expect(answer).must_equal 1 end it "will return 8 for n=9875 and k = 4" do @@ -51,11 +51,11 @@ end it "will return 3 for n=148 and k = 3" do - # Act - answer = refined_super_digit(148, 3) - - # Assert - expect(answer).must_equal 3 + # Act + answer = refined_super_digit(148, 3) + + # Assert + expect(answer).must_equal 3 end end end