diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-05-28 23:22:58 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-28 23:22:58 +0100 |
| commit | e685e6dc9d4dea335d78d36beee7c595f266bee8 (patch) | |
| tree | 9101b281df6527f090731c9e445dcaa545436e82 | |
| parent | c966720fe58763e6e01cf482b19b27d341b68936 (diff) | |
| parent | 2e77aaaad5e82d9bf28f70bb5f0030364d9e41d5 (diff) | |
| download | perlweeklychallenge-club-e685e6dc9d4dea335d78d36beee7c595f266bee8.tar.gz perlweeklychallenge-club-e685e6dc9d4dea335d78d36beee7c595f266bee8.tar.bz2 perlweeklychallenge-club-e685e6dc9d4dea335d78d36beee7c595f266bee8.zip | |
Merge pull request #8149 from tylerw/tw/challenge-218
Ch218: implement Task 1 in Clojure
| -rw-r--r-- | challenge-218/tyler-wardhaugh/clojure/README.md | 4 | ||||
| -rw-r--r-- | challenge-218/tyler-wardhaugh/clojure/bb.edn | 2 | ||||
| -rw-r--r-- | challenge-218/tyler-wardhaugh/clojure/build.clj | 19 | ||||
| -rw-r--r-- | challenge-218/tyler-wardhaugh/clojure/deps.edn | 4 | ||||
| -rw-r--r-- | challenge-218/tyler-wardhaugh/clojure/src/c218/t1.clj | 23 | ||||
| -rw-r--r-- | challenge-218/tyler-wardhaugh/clojure/test/c218/t1_test.clj | 10 |
6 files changed, 57 insertions, 5 deletions
diff --git a/challenge-218/tyler-wardhaugh/clojure/README.md b/challenge-218/tyler-wardhaugh/clojure/README.md index edcc7f57c7..130e9d2771 100644 --- a/challenge-218/tyler-wardhaugh/clojure/README.md +++ b/challenge-218/tyler-wardhaugh/clojure/README.md @@ -1,6 +1,6 @@ -# c217 +# c218 -The Weekly Challenge — #217 — Tyler Wardhaugh +The Weekly Challenge — #218 — Tyler Wardhaugh ## Usage diff --git a/challenge-218/tyler-wardhaugh/clojure/bb.edn b/challenge-218/tyler-wardhaugh/clojure/bb.edn index e9f441cb63..fb73b927b3 100644 --- a/challenge-218/tyler-wardhaugh/clojure/bb.edn +++ b/challenge-218/tyler-wardhaugh/clojure/bb.edn @@ -1,6 +1,6 @@ { :paths ["src" "resources"] - :deps {c217/c217 {:local/root "."}} + :deps {c218/c218 {:local/root "."}} :tasks { diff --git a/challenge-218/tyler-wardhaugh/clojure/build.clj b/challenge-218/tyler-wardhaugh/clojure/build.clj new file mode 100644 index 0000000000..29381cb7c3 --- /dev/null +++ b/challenge-218/tyler-wardhaugh/clojure/build.clj @@ -0,0 +1,19 @@ +(ns build + (:refer-clojure :exclude [test]) + (:require [org.corfield.build :as bb])) + +(def lib 'net.clojars.c218/c218) +(def version "0.1.0-SNAPSHOT") +(def main 'c218.c218) + +(defn test "Run the tests." [opts] + (bb/run-tests opts)) + +(def clean bb/clean) + +(defn ci "Run the CI pipeline of tests (and build the uberjar)." [opts] + (-> opts + (assoc :lib lib :version version :main main) + (bb/run-tests) + (bb/clean) + (bb/uber))) diff --git a/challenge-218/tyler-wardhaugh/clojure/deps.edn b/challenge-218/tyler-wardhaugh/clojure/deps.edn index 9c7a50a024..3d77f22cca 100644 --- a/challenge-218/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-218/tyler-wardhaugh/clojure/deps.edn @@ -1,8 +1,8 @@ {:paths ["src" "resources"] :deps {org.clojure/clojure {:mvn/version "1.11.1"}} :aliases - {:t1 {:main-opts ["-m" "c217.t1"]} - :t2 {:main-opts ["-m" "c217.t2"]} + {:t1 {:main-opts ["-m" "c218.t1"]} + :t2 {:main-opts ["-m" "c218.t2"]} :build {:deps {io.github.seancorfield/build-clj {:git/tag "v0.8.3" :git/sha "7ac1f8d" ;; since we're building an app uberjar, we do not diff --git a/challenge-218/tyler-wardhaugh/clojure/src/c218/t1.clj b/challenge-218/tyler-wardhaugh/clojure/src/c218/t1.clj new file mode 100644 index 0000000000..2f466fe133 --- /dev/null +++ b/challenge-218/tyler-wardhaugh/clojure/src/c218/t1.clj @@ -0,0 +1,23 @@ +(ns c218.t1 + (:require + [clojure.edn :as edn])) + +(def DEFAULT-INPUT [[3 1 2]]) + +(defn max-product + [coll] + (let [sorted (->> coll sort (into [])) + len (count sorted) + three-largest (subvec sorted (- len 3)) + two-smallest-and-largest (concat (subvec sorted 0 2) [(peek sorted)])] + (tap> [sorted three-largest two-smallest-and-largest]) + (->> [three-largest two-smallest-and-largest] + (map #(reduce * 1 %)) + (apply max)))) + +(defn -main + "Run Task 1 with a given input COLL, defaulting to the first example from the + task description." + [& args] + (let [[coll] (or (some->> args (map edn/read-string)) DEFAULT-INPUT)] + (println (max-product coll)))) diff --git a/challenge-218/tyler-wardhaugh/clojure/test/c218/t1_test.clj b/challenge-218/tyler-wardhaugh/clojure/test/c218/t1_test.clj new file mode 100644 index 0000000000..4350e5abd5 --- /dev/null +++ b/challenge-218/tyler-wardhaugh/clojure/test/c218/t1_test.clj @@ -0,0 +1,10 @@ +(ns c218.t1-test + (:require [clojure.test :refer [deftest is testing]] + [c218.t1 :refer [max-product]])) + +(deftest task-1 + (testing "Task 1 produces the correct results from examples in the description" + (is (= 6 (max-product [3 1 2]))) + (is (= 24 (max-product [4 1 3 2]))) + (is (= 3 (max-product [-1 0 1 3 1]))) + (is (= 216 (max-product [-8 2 -9 -4 3]))))) |
