aboutsummaryrefslogtreecommitdiff
path: root/challenge-073
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-09-08 17:21:59 -0700
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-09-09 11:05:17 -0700
commit1c207790109f9ebe3d71516e1aefe62c3d6da8ac (patch)
tree0287e1ae18d1fc982d7c9a8bc77e9760ef87da44 /challenge-073
parentaa0875abd043ddba6781d478e486722ea235f6e6 (diff)
downloadperlweeklychallenge-club-1c207790109f9ebe3d71516e1aefe62c3d6da8ac.tar.gz
perlweeklychallenge-club-1c207790109f9ebe3d71516e1aefe62c3d6da8ac.tar.bz2
perlweeklychallenge-club-1c207790109f9ebe3d71516e1aefe62c3d6da8ac.zip
Task 1
Diffstat (limited to 'challenge-073')
-rw-r--r--challenge-073/tyler-wardhaugh/clojure/deps.edn3
-rw-r--r--challenge-073/tyler-wardhaugh/clojure/pom.xml5
-rw-r--r--challenge-073/tyler-wardhaugh/clojure/src/tw/weekly/ch_1.clj29
-rw-r--r--challenge-073/tyler-wardhaugh/clojure/test/tw/weekly/c73_test.clj4
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"