diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-09-08 17:21:59 -0700 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-09-09 11:05:17 -0700 |
| commit | 1c207790109f9ebe3d71516e1aefe62c3d6da8ac (patch) | |
| tree | 0287e1ae18d1fc982d7c9a8bc77e9760ef87da44 /challenge-073 | |
| parent | aa0875abd043ddba6781d478e486722ea235f6e6 (diff) | |
| download | perlweeklychallenge-club-1c207790109f9ebe3d71516e1aefe62c3d6da8ac.tar.gz perlweeklychallenge-club-1c207790109f9ebe3d71516e1aefe62c3d6da8ac.tar.bz2 perlweeklychallenge-club-1c207790109f9ebe3d71516e1aefe62c3d6da8ac.zip | |
Task 1
Diffstat (limited to 'challenge-073')
4 files changed, 35 insertions, 6 deletions
diff --git a/challenge-073/tyler-wardhaugh/clojure/deps.edn b/challenge-073/tyler-wardhaugh/clojure/deps.edn index 172849d88b..d4a18d3b3d 100644 --- a/challenge-073/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-073/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"} + net.cgrand/xforms {:mvn/version "0.19.2"}} :aliases {:test {:extra-paths ["test"] :extra-deps {org.clojure/test.check {:mvn/version "1.0.0"}}} diff --git a/challenge-073/tyler-wardhaugh/clojure/pom.xml b/challenge-073/tyler-wardhaugh/clojure/pom.xml index c75d9637a7..88602eaab2 100644 --- a/challenge-073/tyler-wardhaugh/clojure/pom.xml +++ b/challenge-073/tyler-wardhaugh/clojure/pom.xml @@ -24,6 +24,11 @@ <artifactId>clojure</artifactId> <version>1.10.1</version> </dependency> + <dependency> + <groupId>net.cgrand</groupId> + <artifactId>xforms</artifactId> + <version>0.19.2</version> + </dependency> </dependencies> <build> <build> diff --git a/challenge-073/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj b/challenge-073/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj index f2540d8a8b..8191b98372 100644 --- a/challenge-073/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj +++ b/challenge-073/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj @@ -1,8 +1,29 @@ (ns tw.weekly.ch-1 - (:require [clojure.edn :as edn])) + (:require [clojure.pprint :refer [cl-format]]) + (:require [clojure.edn :as edn]) + (:require [net.cgrand.xforms :as x])) + +; source: https://github.com/cgrand/xforms +(defn sliding-min + "A transducer to calculate the min of a sliding window over a sequence." + [size] + (comp (x/window size + (fn + ([] (sorted-map)) + ([m] (key (first m))) + ([m x] (update m x (fnil inc 0)))) + (fn [m x] + (let [n (dec (m x))] + (if (zero? n) + (dissoc m x) + (assoc m x (dec n)))))) + (drop (dec size)))) (defn -main - "" + "Run Task 1 with a size (S) and a list of integers (A), defaulting to the example given in the task description." [& args] - (let [] - )) + (let [S (or (some-> args first edn/read-string) 3) + A (or (some->> args rest (map edn/read-string)) [1 5 0 2 9 3 7 6 4 8])] + (cl-format true "~10a: (~{~a~^ ~}), size = ~d~%~10a: (~{~a~^ ~})~%" + "Input" A S + "Output" (sequence (sliding-min 3) A)))) diff --git a/challenge-073/tyler-wardhaugh/clojure/test/tw/weekly/c73_test.clj b/challenge-073/tyler-wardhaugh/clojure/test/tw/weekly/c73_test.clj index d3394084fc..f3228886bb 100644 --- a/challenge-073/tyler-wardhaugh/clojure/test/tw/weekly/c73_test.clj +++ b/challenge-073/tyler-wardhaugh/clojure/test/tw/weekly/c73_test.clj @@ -5,7 +5,9 @@ (deftest ch-1 (testing "Task 1" - )) + (are [size input output] (= (sequence (sliding-min size) input) output) + 3 [1 5 0 2 9 3 7 6 4 8] (list 0 0 0 2 3 3 4 4) + ))) (deftest ch-2 (testing "Task 2" |
