From 46e6742a40370b65c95522d4c678cdd1d2fe6cf6 Mon Sep 17 00:00:00 2001 From: KKennedyCodes Date: Fri, 15 Nov 2019 15:22:59 -0800 Subject: [PATCH] Add Methods Added --- lib/fibonacci.rb | 35 +++++++++++++++- lib/super_digit.rb | 22 ++++++++-- test/fibonacci_test.rb | 90 ++++++++++++++++++++-------------------- test/super_digit_test.rb | 38 ++++++++--------- 4 files changed, 116 insertions(+), 69 deletions(-) diff --git a/lib/fibonacci.rb b/lib/fibonacci.rb index 7465c25..ca1bab9 100644 --- a/lib/fibonacci.rb +++ b/lib/fibonacci.rb @@ -3,6 +3,39 @@ # Time Complexity - ? # Space Complexity - ? (should be O(n)) # Hint, you may want a recursive helper method + + def fibonacci(n) - + if n < 0 + raise ArgumentError + end + if n == 0 + return 0 + end + if n==1 || n==2 + return 1 + end + fibonacci_helper(0, n, {1=> 1, 2=> 1}) end + +def fibonacci_helper(current, n, look_up) + if n == current + return look_up[current-1] + look_up[current-2] + end + if current >= 3 + look_up[current] = look_up[current-1] + look_up[current-2] + look_up.delete(current - 2) + end + current += 1 + fibonacci_helper(current, n, look_up) +end + + + + +# 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 +#1.618 the golden ratio + +# Fib(0) = 0 Fib(1) = 1 + +# Fib(n) = Fib(n-2) + Fib(n-1), for all n >= 2 \ No newline at end of file diff --git a/lib/super_digit.rb b/lib/super_digit.rb index 33e367f..5351d60 100644 --- a/lib/super_digit.rb +++ b/lib/super_digit.rb @@ -3,13 +3,27 @@ # Time Complexity - ? # Space Complexity - ? def super_digit(n) - -end + if n.class != Array + n = n.to_s.split('') + end + + sum = 0 + n.each do |value| + sum += value.to_i + end + if sum < 10 + return sum + else + return super_digit(sum) + end +end + # Time Complexity - ? # Space Complexity - ? def refined_super_digit(n, k) - + number = n * k + final = super_digit(number) + return final end - \ No newline at end of file diff --git a/test/fibonacci_test.rb b/test/fibonacci_test.rb index 639f3b1..a4e07d7 100644 --- a/test/fibonacci_test.rb +++ b/test/fibonacci_test.rb @@ -3,54 +3,54 @@ describe "Fibonacci" do it "will raise an error for n < 0" do expect { - # Act - fibonacci(-1) - # Assert - }.must_raise ArgumentError - end - - it "will return 0 for fib(0)" do - # Act - answer = fibonacci(0) - - # Assert - expect(answer).must_equal 0 - end - - it "will return 1 for fib(1)" do # Act - answer = fibonacci(1) - + fibonacci(-1) # Assert - expect(answer).must_equal 1 - end - - it "will return 1 for fib(2)" do - # Act - answer = fibonacci(2) - - # Assert - expect(answer).must_equal 1 - end - it "will return 3 for fib(4)" do - # Act - answer = fibonacci(4) + }.must_raise ArgumentError +end - # Assert - expect(answer).must_equal 3 - end - it "will return 5 for fib(5)" do - # Act - answer = fibonacci(4) +it "will return 0 for fib(0)" do + # Act + answer = fibonacci(0) + + # Assert + expect(answer).must_equal 0 +end - # Assert - expect(answer).must_equal 3 - end - it "will return 55 for fib(10)" do - # Act - answer = fibonacci(10) +it "will return 1 for fib(1)" do + # Act + answer = fibonacci(1) + + # Assert + expect(answer).must_equal 1 +end - # Assert - expect(answer).must_equal 55 - end +it "will return 1 for fib(2)" do + # Act + answer = fibonacci(2) + + # Assert + expect(answer).must_equal 1 +end +it "will return 3 for fib(4)" do + # Act + answer = fibonacci(4) + + # Assert + expect(answer).must_equal 3 +end +it "will return 5 for fib(5)" do + # Act + answer = fibonacci(4) + + # Assert + expect(answer).must_equal 3 +end +it "will return 55 for fib(10)" do + # Act + answer = fibonacci(10) + + # Assert + expect(answer).must_equal 55 +end end diff --git a/test/super_digit_test.rb b/test/super_digit_test.rb index 60da3a1..ac68984 100644 --- a/test/super_digit_test.rb +++ b/test/super_digit_test.rb @@ -1,61 +1,61 @@ 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) - + # Assert expect(answer).must_equal 2 end - + it "will return 5 for super_digit(5)" do # Act answer = super_digit(5) - + # Assert expect(answer).must_equal 5 - end - + end + it "will return 6 for super_digit(123)" do # Act answer = super_digit(123) - + # Assert expect(answer).must_equal 6 end - + it "will return 6 for super_digit(12327)" do # Act answer = super_digit(12327) - + # Assert expect(answer).must_equal 6 end - + 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 end - + it "will return 8 for n=9875 and k = 4" do # Act answer = refined_super_digit(9875, 4) - + # Assert expect(answer).must_equal 8 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