Skip to content

Commit 5815fbb

Browse files
authored
prime-factors: Update to latest (#825)
* sync tests * add generator and generate tests * update function template in starter file * simplify example solution * update contributors
1 parent 070d461 commit 5815fbb

File tree

6 files changed

+111
-52
lines changed

6 files changed

+111
-52
lines changed

exercises/practice/prime-factors/.meta/config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"jgwhite",
1111
"kytrinyx",
1212
"mathias",
13-
"yurrriq"
13+
"yurrriq",
14+
"tasxatzial"
1415
],
1516
"files": {
1617
"solution": [
Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
(ns prime-factors)
22

3-
(defn- least-prime-divisor
4-
[number]
5-
(or (first
6-
(filter #(zero? (rem number %1))
7-
(range 2 (inc (/ number 2)))))
8-
number))
9-
10-
(defn of [number]
11-
(if
12-
(< number 2) []
13-
(let [divisor (least-prime-divisor number)]
14-
(into [divisor] (of (/ number divisor))))))
3+
(defn of
4+
[n]
5+
(loop [result []
6+
candidate 2
7+
n n]
8+
(if (= n 1)
9+
result
10+
(if (zero? (mod n candidate))
11+
(recur (conj result candidate) candidate (quot n candidate))
12+
(recur result (inc candidate) n)))))
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
(ns prime-factors-test
2+
(:require [clojure.test :refer [deftest testing is]]
3+
prime-factors))
4+
5+
{{#test_cases.factors}}
6+
(deftest of_test_{{idx}}
7+
(testing {{context}}
8+
(is (= {{expected}} (prime-factors/of {{input.value}})))))
9+
{{/test_cases.factors}}

exercises/practice/prime-factors/.meta/tests.toml

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,41 @@
1-
# This is an auto-generated file. Regular comments will be removed when this
2-
# file is regenerated. Regenerating will not touch any manually added keys,
3-
# so comments can be added in a "comment" key.
1+
# This is an auto-generated file.
2+
#
3+
# Regenerating this file via `configlet sync` will:
4+
# - Recreate every `description` key/value pair
5+
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+
# - Preserve any other key/value pair
8+
#
9+
# As user-added comments (using the # character) will be removed when this file
10+
# is regenerated, comments can be added via a `comment` key.
411

512
[924fc966-a8f5-4288-82f2-6b9224819ccd]
613
description = "no factors"
714

815
[17e30670-b105-4305-af53-ddde182cb6ad]
916
description = "prime number"
1017

18+
[238d57c8-4c12-42ef-af34-ae4929f94789]
19+
description = "another prime number"
20+
1121
[f59b8350-a180-495a-8fb1-1712fbee1158]
1222
description = "square of a prime"
1323

24+
[756949d3-3158-4e3d-91f2-c4f9f043ee70]
25+
description = "product of first prime"
26+
1427
[bc8c113f-9580-4516-8669-c5fc29512ceb]
1528
description = "cube of a prime"
1629

30+
[7d6a3300-a4cb-4065-bd33-0ced1de6cb44]
31+
description = "product of second prime"
32+
33+
[073ac0b2-c915-4362-929d-fc45f7b9a9e4]
34+
description = "product of third prime"
35+
36+
[6e0e4912-7fb6-47f3-a9ad-dbcd79340c75]
37+
description = "product of first and second prime"
38+
1739
[00485cd3-a3fe-4fbe-a64a-a4308fc1f870]
1840
description = "product of primes and non-primes"
1941

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
(ns prime-factors)
22

3-
(defn of [] ;; <- arglist goes here
4-
;; your code goes here
5-
)
3+
(defn of
4+
"Returns the prime factors of the given number."
5+
[num]
6+
;; function body
7+
)
Lines changed: 60 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,63 @@
11
(ns prime-factors-test
2-
(:require [clojure.test :refer [deftest is]]
2+
(:require [clojure.test :refer [deftest testing is]]
33
prime-factors))
44

5-
(deftest one
6-
(is (= [] (prime-factors/of 1))))
7-
8-
(deftest two
9-
(is (= [2] (prime-factors/of 2))))
10-
11-
(deftest three
12-
(is (= [3] (prime-factors/of 3))))
13-
14-
(deftest four
15-
(is (= [2, 2] (prime-factors/of 4))))
16-
17-
(deftest six
18-
(is (= [2, 3] (prime-factors/of 6))))
19-
20-
(deftest eight
21-
(is (= [2, 2, 2] (prime-factors/of 8))))
22-
23-
(deftest nine
24-
(is (= [3, 3] (prime-factors/of 9))))
25-
26-
(deftest twenty-seven
27-
(is (= [3, 3, 3] (prime-factors/of 27))))
28-
29-
(deftest six-hundred-twenty-five
30-
(is (= [5, 5, 5, 5] (prime-factors/of 625))))
31-
32-
(deftest a-large-number
33-
(is (= [5, 17, 23, 461] (prime-factors/of 901255))))
34-
35-
(deftest a-huge-number
36-
(is (= [11, 9539, 894119] (prime-factors/of 93819012551))))
5+
(deftest of_test_1
6+
(testing "no factors"
7+
(is (= []
8+
(prime-factors/of 1)))))
9+
10+
(deftest of_test_2
11+
(testing "prime number"
12+
(is (= [2]
13+
(prime-factors/of 2)))))
14+
15+
(deftest of_test_3
16+
(testing "another prime number"
17+
(is (= [3]
18+
(prime-factors/of 3)))))
19+
20+
(deftest of_test_4
21+
(testing "square of a prime"
22+
(is (= [3 3]
23+
(prime-factors/of 9)))))
24+
25+
(deftest of_test_5
26+
(testing "product of first prime"
27+
(is (= [2 2]
28+
(prime-factors/of 4)))))
29+
30+
(deftest of_test_6
31+
(testing "cube of a prime"
32+
(is (= [2 2 2]
33+
(prime-factors/of 8)))))
34+
35+
(deftest of_test_7
36+
(testing "product of second prime"
37+
(is (= [3 3 3]
38+
(prime-factors/of 27)))))
39+
40+
(deftest of_test_8
41+
(testing "product of third prime"
42+
(is (= [5 5 5 5]
43+
(prime-factors/of 625)))))
44+
45+
(deftest of_test_9
46+
(testing "product of first and second prime"
47+
(is (= [2 3]
48+
(prime-factors/of 6)))))
49+
50+
(deftest of_test_10
51+
(testing "product of primes and non-primes"
52+
(is (= [2 2 3]
53+
(prime-factors/of 12)))))
54+
55+
(deftest of_test_11
56+
(testing "product of primes"
57+
(is (= [5 17 23 461]
58+
(prime-factors/of 901255)))))
59+
60+
(deftest of_test_12
61+
(testing "factors include a large prime"
62+
(is (= [11 9539 894119]
63+
(prime-factors/of 93819012551)))))

0 commit comments

Comments
 (0)