aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-11-02 16:25:27 -0800
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-11-06 16:10:11 -0800
commitdd1ff820ba0d044cbef420504a292ec5aa3057d5 (patch)
tree82d54a4e8b6fb424cd21f7ab985551ec8bbaf708
parent36a12585aadecc449f49480df9dba163e7bee542 (diff)
downloadperlweeklychallenge-club-dd1ff820ba0d044cbef420504a292ec5aa3057d5.tar.gz
perlweeklychallenge-club-dd1ff820ba0d044cbef420504a292ec5aa3057d5.tar.bz2
perlweeklychallenge-club-dd1ff820ba0d044cbef420504a292ec5aa3057d5.zip
Ch85 (Clojure): Task 1
-rw-r--r--challenge-085/tyler-wardhaugh/clojure/deps.edn3
-rw-r--r--challenge-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/core.clj9
-rw-r--r--challenge-085/tyler-wardhaugh/clojure/src/tw/weekly/c85/t1.clj26
-rw-r--r--challenge-085/tyler-wardhaugh/clojure/test/tw/weekly/c85_test.clj15
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))))))))