From 0ab1967ddaf9375c60ce3e60c6135bfd5c869f26 Mon Sep 17 00:00:00 2001 From: Kirsten Anderson Date: Sun, 7 Apr 2019 15:43:30 -0700 Subject: [PATCH 1/2] pass all tests --- lib/factorial.rb | 11 ++++++++++- specs/factorial_spec.rb | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/factorial.rb b/lib/factorial.rb index 6a4a408..6a74e5d 100644 --- a/lib/factorial.rb +++ b/lib/factorial.rb @@ -2,5 +2,14 @@ # Time complexity: ? # Space complexity: ? def factorial(number) - raise NotImplementedError + if !number + raise ArgumentError, "Number cannot be nil" + end + + product = number > 1 ? number : 1 + while number >= 2 + product = product *= (number - 1) + number -= 1 + end + return product end diff --git a/specs/factorial_spec.rb b/specs/factorial_spec.rb index de28055..287ce5c 100644 --- a/specs/factorial_spec.rb +++ b/specs/factorial_spec.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'minitest/reporters' -require_relative '../lib/factorial' +require "minitest/autorun" +require "minitest/reporters" +require_relative "../lib/factorial" describe "factorial" do describe "basic tests" do @@ -17,7 +17,7 @@ describe "edge cases" do # if the parameter is an object, check for nil it "nil object is not an integer" do - proc {factorial(nil)}.must_raise ArgumentError + proc { factorial(nil) }.must_raise ArgumentError end it "factorial(0) = 1" do From 29faae66ab770ba01ddee5c077176aa5b5d32fa0 Mon Sep 17 00:00:00 2001 From: Kirsten Anderson Date: Wed, 10 Apr 2019 16:52:34 -0700 Subject: [PATCH 2/2] pass all tests --- lib/factorial.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/factorial.rb b/lib/factorial.rb index 6a74e5d..091cc32 100644 --- a/lib/factorial.rb +++ b/lib/factorial.rb @@ -1,6 +1,6 @@ # Computes factorial of the input number and returns it -# Time complexity: ? -# Space complexity: ? +# Time complexity: O(n), where n is the value of the number +# Space complexity: O(1) def factorial(number) if !number raise ArgumentError, "Number cannot be nil"