diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-11-02 16:25:27 -0800 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-11-06 16:10:11 -0800 |
| commit | dd1ff820ba0d044cbef420504a292ec5aa3057d5 (patch) | |
| tree | 82d54a4e8b6fb424cd21f7ab985551ec8bbaf708 | |
| parent | 36a12585aadecc449f49480df9dba163e7bee542 (diff) | |
| download | perlweeklychallenge-club-dd1ff820ba0d044cbef420504a292ec5aa3057d5.tar.gz perlweeklychallenge-club-dd1ff820ba0d044cbef420504a292ec5aa3057d5.tar.bz2 perlweeklychallenge-club-dd1ff820ba0d044cbef420504a292ec5aa3057d5.zip | |
Ch85 (Clojure): Task 1
4 files changed, 52 insertions, 1 deletions
diff --git a/challenge-085/tyler-wardhaugh/clojure/deps.edn b/challenge-085/tyler-wardhaugh/clojure/deps.edn index cea4fb663c..cdbf046c18 100644 --- a/challenge-085/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-085/tyler-wardhaugh/clojure/deps.edn @@ -1,5 +1,6 @@ {:paths ["src" "resources"] - :deps {org.clojure/clojure {:mvn/version "1.10.1"}} + :deps {org.clojure/clojure {:mvn/version "1.10.1"} + 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-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/core.clj b/challenge-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/core.clj new file mode 100644 index 0000000000..26b82079ac --- /dev/null +++ b/challenge-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/core.clj @@ -0,0 +1,9 @@ +(ns tw.weekly.c85.core + (:require [tw.weekly.c85.t1 :as t1]) + (:gen-class)) + +(defn -main + "Run all tasks" + [& _] + (println "Task #1:") + (t1/-main)) diff --git a/challenge-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/t1.clj b/challenge-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/t1.clj new file mode 100644 index 0000000000..e2b6cad34b --- /dev/null +++ b/challenge-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/t1.clj @@ -0,0 +1,26 @@ +(ns tw.weekly.c85.t1 + (:require [clojure.math.combinatorics :as combo]) + (:require [clojure.edn :as edn])) + +;;; +; Task description for TASK #1 › Triplet Sum +;;; + +(defn find-triplet-sum + "Find a triplet such that 1 < a+b+c < 2. If found, return the smallest + sum, otherwise nil." + [coll] + (let [lower 1, upper 2, num-items 3 + expand (fn [[e cnt]] (repeat (min num-items cnt) e)) + v (->> coll (filter (partial > upper)) frequencies (mapcat expand))] + (->> (combo/permuted-combinations v num-items) + (map (partial reduce +)) + (filter #(< lower % upper)) + first))) + +(defn -main + "Run Task 1 with an list of positive real numbers R, defaulting to the + first example given in the task description." + [& args] + (let [R (or (some->> args (map edn/read-string)) [1.2 0.4 0.1 2.5])] + (println (if (find-triplet-sum R) 1 0)))) diff --git a/challenge-085/tyler-wardhaugh/clojure/test/tw/weekly/c85_test.clj b/challenge-085/tyler-wardhaugh/clojure/test/tw/weekly/c85_test.clj new file mode 100644 index 0000000000..49c495a2cb --- /dev/null +++ b/challenge-085/tyler-wardhaugh/clojure/test/tw/weekly/c85_test.clj @@ -0,0 +1,15 @@ +(ns tw.weekly.c85-test + (:require [clojure.test :refer [deftest is testing]] + [tw.weekly.c85.t1 :refer [find-triplet-sum]])) + +(deftest task-1 + (testing "Task 1, Triplet Sum" + (is (some? (find-triplet-sum [1.2 0.4 0.1 2.5]))) + (is (nil? (find-triplet-sum [0.2 1.5 0.9 1.1]))) + (is (some? (find-triplet-sum [0.5 1.1 0.3 0.7]))) + + (is (nil? (find-triplet-sum [0 0.5 0.5]))) + (is (nil? (find-triplet-sum [0.1 0.2 0.3]))) + (is (nil? (find-triplet-sum [1.1 0.1]))) + (is (some? (find-triplet-sum [0.2 0.5 0.5 0.5 0.8 0.8]))) + (is (some? (find-triplet-sum (concat [0.9 0.8 0.05] (repeat 100 (rand-int 1000)))))))) |
