aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-076/tyler-wardhaugh/clojure/deps.edn4
-rw-r--r--challenge-076/tyler-wardhaugh/clojure/pom.xml10
l---------challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch-1.clj1
-rw-r--r--challenge-076/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj37
-rw-r--r--challenge-076/tyler-wardhaugh/clojure/test/tw/weekly/c76_test.clj13
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"
+ ))