diff --git a/exercises/practice/prime-factors/.meta/config.json b/exercises/practice/prime-factors/.meta/config.json index c845f410..581048a0 100644 --- a/exercises/practice/prime-factors/.meta/config.json +++ b/exercises/practice/prime-factors/.meta/config.json @@ -8,7 +8,8 @@ "jackhughesweb", "KevinWMatthews", "kytrinyx", - "patricksjackson" + "patricksjackson", + "JagritGumber" ], "files": { "solution": [ diff --git a/exercises/practice/prime-factors/.meta/example.cpp b/exercises/practice/prime-factors/.meta/example.cpp index b9b83fc6..b41f2393 100644 --- a/exercises/practice/prime-factors/.meta/example.cpp +++ b/exercises/practice/prime-factors/.meta/example.cpp @@ -1,14 +1,13 @@ -#include "prime_factors.h" #include -namespace prime_factors -{ +#include "prime_factors.h" + +namespace prime_factors { -std::vector of(int n) -{ - std::vector factors; - const int end{static_cast(std::sqrt(n))}; - for (int candidate{2}; candidate <= end; ++candidate) { +std::vector of(long long n) { + std::vector factors; + const long long end{static_cast(std::sqrt(n))}; + for (long long candidate{2}; candidate <= end; ++candidate) { while (n % candidate == 0) { factors.push_back(candidate); n /= candidate; @@ -21,4 +20,4 @@ std::vector of(int n) return factors; } -} +} // namespace prime_factors diff --git a/exercises/practice/prime-factors/.meta/example.h b/exercises/practice/prime-factors/.meta/example.h index bc4940f9..f1971f1b 100644 --- a/exercises/practice/prime-factors/.meta/example.h +++ b/exercises/practice/prime-factors/.meta/example.h @@ -3,10 +3,9 @@ #include -namespace prime_factors -{ +namespace prime_factors { -std::vector of(int n); +std::vector of(long long n); } diff --git a/exercises/practice/prime-factors/.meta/tests.toml b/exercises/practice/prime-factors/.meta/tests.toml index f3f05a3e..6f9cc8ce 100644 --- a/exercises/practice/prime-factors/.meta/tests.toml +++ b/exercises/practice/prime-factors/.meta/tests.toml @@ -1,6 +1,13 @@ -# This is an auto-generated file. Regular comments will be removed when this -# file is regenerated. Regenerating will not touch any manually added keys, -# so comments can be added in a "comment" key. +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. [924fc966-a8f5-4288-82f2-6b9224819ccd] description = "no factors" @@ -8,12 +15,27 @@ description = "no factors" [17e30670-b105-4305-af53-ddde182cb6ad] description = "prime number" +[238d57c8-4c12-42ef-af34-ae4929f94789] +description = "another prime number" + [f59b8350-a180-495a-8fb1-1712fbee1158] description = "square of a prime" +[756949d3-3158-4e3d-91f2-c4f9f043ee70] +description = "product of first prime" + [bc8c113f-9580-4516-8669-c5fc29512ceb] description = "cube of a prime" +[7d6a3300-a4cb-4065-bd33-0ced1de6cb44] +description = "product of second prime" + +[073ac0b2-c915-4362-929d-fc45f7b9a9e4] +description = "product of third prime" + +[6e0e4912-7fb6-47f3-a9ad-dbcd79340c75] +description = "product of first and second prime" + [00485cd3-a3fe-4fbe-a64a-a4308fc1f870] description = "product of primes and non-primes" diff --git a/exercises/practice/prime-factors/prime_factors_test.cpp b/exercises/practice/prime-factors/prime_factors_test.cpp index fa1e29d4..4c979cf9 100644 --- a/exercises/practice/prime-factors/prime_factors_test.cpp +++ b/exercises/practice/prime-factors/prime_factors_test.cpp @@ -5,94 +5,111 @@ #include "test/catch.hpp" #endif -TEST_CASE("_1_yields_empty") -{ - const std::vector expected{}; +TEST_CASE("no factors", "[factors][924fc966-a8f5-4288-82f2-6b9224819ccd]") { + const std::vector expected{}; - const std::vector actual{prime_factors::of(1)}; + const std::vector actual{prime_factors::of(1)}; REQUIRE(expected == actual); } #if defined(EXERCISM_RUN_ALL_TESTS) -TEST_CASE("_2_yields_2") -{ - const std::vector expected{2}; +TEST_CASE("prime number", "[factors][17e30670-b105-4305-af53-ddde182cb6ad]") { + const std::vector expected{2}; - const std::vector actual{prime_factors::of(2)}; + const std::vector actual{prime_factors::of(2)}; REQUIRE(expected == actual); } -TEST_CASE("_3_yields_3") -{ - const std::vector expected{3}; +TEST_CASE("another prime number", + "[factors][238d57c8-4c12-42ef-af34-ae4929f94789]") { + const std::vector expected{3}; - const std::vector actual{prime_factors::of(3)}; + const std::vector actual{prime_factors::of(3)}; REQUIRE(expected == actual); } -TEST_CASE("_4_yields_2_2") -{ - const std::vector expected{2, 2}; +TEST_CASE("square of a prime", + "[factors][f59b8350-a180-495a-8fb1-1712fbee1158]") { + const std::vector expected{3, 3}; - const std::vector actual{prime_factors::of(4)}; + const std::vector actual{prime_factors::of(9)}; REQUIRE(expected == actual); } -TEST_CASE("_6_yields_2_3") -{ - const std::vector expected{2, 3}; +TEST_CASE("product of first prime", + "[factors][756949d3-3158-4e3d-91f2-c4f9f043ee70]") { + const std::vector expected{2, 2}; - const std::vector actual{prime_factors::of(6)}; + const std::vector actual{prime_factors::of(4)}; REQUIRE(expected == actual); } -TEST_CASE("_8_yields_2_2_2") -{ - const std::vector expected{2, 2, 2}; +TEST_CASE("cube of a prime", + "[factors][bc8c113f-9580-4516-8669-c5fc29512ceb]") { + const std::vector expected{2, 2, 2}; - const std::vector actual{prime_factors::of(8)}; + const std::vector actual{prime_factors::of(8)}; REQUIRE(expected == actual); } -TEST_CASE("_9_yields_3_3") -{ - const std::vector expected{3, 3}; +TEST_CASE("product of second prime", + "[factors][7d6a3300-a4cb-4065-bd33-0ced1de6cb44]") { + const std::vector expected{3, 3, 3}; - const std::vector actual{prime_factors::of(9)}; + const std::vector actual{prime_factors::of(27)}; REQUIRE(expected == actual); } -TEST_CASE("_27_yields_3_3_3") -{ - const std::vector expected{3, 3, 3}; +TEST_CASE("product of third prime", + "[factors][073ac0b2-c915-4362-929d-fc45f7b9a9e4]") { + const std::vector expected{5, 5, 5, 5}; - const std::vector actual{prime_factors::of(27)}; + const std::vector actual{prime_factors::of(625)}; REQUIRE(expected == actual); } -TEST_CASE("_625_yields_5_5_5_5") -{ - const std::vector expected{5, 5, 5, 5}; +TEST_CASE("product of first and second prime", + "[factors][6e0e4912-7fb6-47f3-a9ad-dbcd79340c75]") { + const std::vector expected{2, 3}; - const std::vector actual{prime_factors::of(625)}; + const std::vector actual{prime_factors::of(6)}; REQUIRE(expected == actual); } -TEST_CASE("_901255_yields_5_17_23_461") -{ - const std::vector expected{5, 17, 23, 461}; +TEST_CASE("product of primes and non-primes", + "[factors][00485cd3-a3fe-4fbe-a64a-a4308fc1f870]") { + const std::vector expected{2, 2, 3}; - const std::vector actual{prime_factors::of(901255)}; + const std::vector actual{prime_factors::of(12)}; REQUIRE(expected == actual); } + +TEST_CASE("product of primes", + "[factors][02251d54-3ca1-4a9b-85e1-b38f4b0ccb91]") { + const std::vector expected{5, 17, 23, 461}; + + const std::vector actual{prime_factors::of(901255)}; + + REQUIRE(expected == actual); +} + +TEST_CASE("factors include a large prime", + "[factors][070cf8dc-e202-4285-aa37-8d775c9cd473]") { + const std::vector expected{11, 9539, 894119}; + + const std::vector actual{prime_factors::of(93819012551)}; + + REQUIRE(expected == actual); +} + #endif