diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@entercom.com> | 2020-08-31 16:36:11 -0700 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@entercom.com> | 2020-09-04 13:45:06 -0700 |
| commit | a4595717ac5c2a026763f6daee285570fd4e3373 (patch) | |
| tree | aaa3d324e10f8fae4419df6f469dbeff423f11fd | |
| parent | 95842629a3433fe1784d03cd7f51f958c1489b3e (diff) | |
| download | perlweeklychallenge-club-a4595717ac5c2a026763f6daee285570fd4e3373.tar.gz perlweeklychallenge-club-a4595717ac5c2a026763f6daee285570fd4e3373.tar.bz2 perlweeklychallenge-club-a4595717ac5c2a026763f6daee285570fd4e3373.zip | |
Task #1
5 files changed, 64 insertions, 1 deletions
diff --git a/challenge-076/tyler-wardhaugh/clojure/deps.edn b/challenge-076/tyler-wardhaugh/clojure/deps.edn index a96b7f6cb9..2befca222b 100644 --- a/challenge-076/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-076/tyler-wardhaugh/clojure/deps.edn @@ -1,5 +1,7 @@ {:paths ["src" "resources"] - :deps {org.clojure/clojure {:mvn/version "1.10.1"}} + :deps {org.clojure/clojure {:mvn/version "1.10.1"} + com.hypirion/primes {:mvn/version "0.2.2"} + org.clojure/math.combinatorics {:mvn/version "0.1.6"}} :aliases {:test {:extra-paths ["test"] :extra-deps {org.clojure/test.check {:mvn/version "1.0.0"}}} diff --git a/challenge-076/tyler-wardhaugh/clojure/pom.xml b/challenge-076/tyler-wardhaugh/clojure/pom.xml index 33951743ca..418d05029f 100644 --- a/challenge-076/tyler-wardhaugh/clojure/pom.xml +++ b/challenge-076/tyler-wardhaugh/clojure/pom.xml @@ -24,6 +24,16 @@ <artifactId>clojure</artifactId> <version>1.10.1</version> </dependency> + <dependency> + <groupId>com.hypirion</groupId> + <artifactId>primes</artifactId> + <version>0.2.2</version> + </dependency> + <dependency> + <groupId>org.clojure</groupId> + <artifactId>math.combinatorics</artifactId> + <version>0.1.6</version> + </dependency> </dependencies> <build> <build> diff --git a/challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj b/challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj new file mode 120000 index 0000000000..924a7a086e --- /dev/null +++ b/challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj @@ -0,0 +1 @@ +ch_1.clj
\ No newline at end of file diff --git a/challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj b/challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj new file mode 100644 index 0000000000..300b89c7ff --- /dev/null +++ b/challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj @@ -0,0 +1,37 @@ +(ns tw.weekly.ch-1 + (:require [clojure.edn :as edn]) + (:require [clojure.math.combinatorics :as combo]) + (:require [com.hypirion.primes :as p])) + +; My initial attempt, which I've preserved here. +(defn find-min-primes-to-sum-brute-force + "Find the minimum number of prime numbers required, whose summation gives you the argument provided, by brute force." + [n] + (if (p/prime? n) [n] + (as-> n x + (p/take-below x) + (combo/partitions x :min 2 :max 3) + (mapcat identity x) + (filter #(= n (reduce + %)) x) + (sort-by count x) + (first x)))) + +; basis for algorithm: +; https://stackoverflow.com/a/35756072 +; StackOverflow answer by user448810 +(defn find-min-primes-to-sum + "Find the minimum number of prime numbers required, whose summation gives you the argument provided." + [n] + (cond + (p/prime? n) [n] + (even? n) (let [f (juxt #(- n %) identity)] (->> (p/primes) (filter #(p/prime? (- n %))) first f)) + (and (odd? n) (p/prime? (- n 2))) [2 (- n 2)] + :else (conj 3 (find-min-primes-to-sum (- n 3))))) + +(defn -main + "Run Task 1 with a number N, defaulting to the number given in the task example, 9." + [& args] + (let [N (or (some-> args first edn/read-string) 9)] + (let [solution (find-min-primes-to-sum N)] + (printf "%d prime number(s) are the minimum number required to sum to %d.\n" (count solution) N) + (println solution)))) diff --git a/challenge-076/tyler-wardhaugh/clojure/test/tw/weekly/c76_test.clj b/challenge-076/tyler-wardhaugh/clojure/test/tw/weekly/c76_test.clj new file mode 100644 index 0000000000..de205dd328 --- /dev/null +++ b/challenge-076/tyler-wardhaugh/clojure/test/tw/weekly/c76_test.clj @@ -0,0 +1,13 @@ +(ns tw.weekly.c76-test + (:require [clojure.test :refer :all] + [tw.weekly.ch-1 :refer [find-min-primes-to-sum find-min-primes-to-sum-brute-force]] + [tw.weekly.ch-2 :refer []])) + +(deftest ch-1 + (testing "Task 1" + (is (= 2 (count (find-min-primes-to-sum 9)) (count (find-min-primes-to-sum-brute-force 9)))) + (is (= 2 (count (find-min-primes-to-sum 34)) (count (find-min-primes-to-sum-brute-force 34)))))) + +(deftest ch-2 + (testing "Task 2" + )) |
