diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2021-11-09 00:27:15 -0800 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2021-11-13 16:49:14 -0800 |
| commit | 9c75eb4f419bba343e1a0479dc81961246bc5929 (patch) | |
| tree | ebaa8f9d94bcf6d06718d7962ba25c32fdbf6299 | |
| parent | 0814a5fbb2b360dc72ef19246ae752f2efa96d67 (diff) | |
| download | perlweeklychallenge-club-9c75eb4f419bba343e1a0479dc81961246bc5929.tar.gz perlweeklychallenge-club-9c75eb4f419bba343e1a0479dc81961246bc5929.tar.bz2 perlweeklychallenge-club-9c75eb4f419bba343e1a0479dc81961246bc5929.zip | |
Ch138 (Clojure): Task 2
3 files changed, 40 insertions, 5 deletions
diff --git a/challenge-138/tyler-wardhaugh/clojure/deps.edn b/challenge-138/tyler-wardhaugh/clojure/deps.edn index 54edd9d65e..15aa02e4d4 100644 --- a/challenge-138/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-138/tyler-wardhaugh/clojure/deps.edn @@ -1,7 +1,8 @@ {:paths ["src" "resources"] :deps {org.clojure/clojure {:mvn/version "1.10.3"} clojure.java-time/clojure.java-time {:mvn/version "0.3.3"} - org.threeten/threeten-extra {:mvn/version "1.7.0"}} + org.threeten/threeten-extra {:mvn/version "1.7.0"} + org.clojure/math.numeric-tower {:mvn/version "0.0.4"}} :aliases {:test {:extra-paths ["test"] :extra-deps {org.clojure/test.check {:mvn/version "1.1.0"} diff --git a/challenge-138/tyler-wardhaugh/clojure/src/tw/weekly/c138/t2.clj b/challenge-138/tyler-wardhaugh/clojure/src/tw/weekly/c138/t2.clj index ca4530b799..714b0beb42 100644 --- a/challenge-138/tyler-wardhaugh/clojure/src/tw/weekly/c138/t2.clj +++ b/challenge-138/tyler-wardhaugh/clojure/src/tw/weekly/c138/t2.clj @@ -1,14 +1,46 @@ (ns tw.weekly.c138.t2 - (:require [clojure.edn :as edn])) + (:require [clojure.edn :as edn] + [clojure.pprint :refer [cl-format]] + [clojure.string :as str] + [clojure.math.numeric-tower :refer [sqrt expt]])) ;;; ; Task description for TASK #2 › Split Number ;;; (def DEFAULT-INPUT [81]) +(defn ->int + [n] (Integer/parseInt n 10)) + +(defn n->break [len n] + (-> n + (bit-shift-left 1) + (->> (cl-format nil "~v,'0b" len)) + (str/escape {\1 \+ \0 \-}))) + +(defn get-splits + [n] + (let [s (str n) + len (count s) + breaks (map (partial n->break len) (range 1 (expt 2 (dec len)))) + join-nums (fn [coll] + (when (not= [\+] coll) + (->> coll (remove #{\-}) (str/join "") ->int))) + xf (map (comp (partial keep join-nums) + (partial partition-by #{\+}) + (partial interleave s)))] + (sequence xf breaks))) + +(defn sum-of-splits? + [n] + (let [source (get-splits n) + xf (comp (map (partial reduce +)) (keep #(when (= % (sqrt n)) true))) + f (completing (fn [_ v] (reduced v)))] + (transduce xf f false source))) + (defn -main "Run Task 2 with a given input N, defaulting to the first example from the task description." [& args] (let [[N] (or (some->> args (map edn/read-string)) DEFAULT-INPUT)] - )) + (println (if (sum-of-splits? N) 1 0)))) diff --git a/challenge-138/tyler-wardhaugh/clojure/test/tw/weekly/c138/t2_test.clj b/challenge-138/tyler-wardhaugh/clojure/test/tw/weekly/c138/t2_test.clj index 71d2fe47e4..b2a3ef3bb1 100644 --- a/challenge-138/tyler-wardhaugh/clojure/test/tw/weekly/c138/t2_test.clj +++ b/challenge-138/tyler-wardhaugh/clojure/test/tw/weekly/c138/t2_test.clj @@ -1,7 +1,9 @@ (ns tw.weekly.c138.t2-test (:require [clojure.test :refer [deftest is testing]] - [tw.weekly.c138.t2 :refer []])) + [tw.weekly.c138.t2 :refer [sum-of-splits?]])) (deftest examples (testing "Examples from description" - )) + (is (true? (sum-of-splits? 81))) + (is (true? (sum-of-splits? 9801))) + (is (false? (sum-of-splits? 36))))) |
