diff options
7 files changed, 85 insertions, 10 deletions
diff --git a/challenge-117/tyler-wardhaugh/clojure/bb.edn b/challenge-117/tyler-wardhaugh/clojure/bb.edn index d6814eab4a..0409645368 100644 --- a/challenge-117/tyler-wardhaugh/clojure/bb.edn +++ b/challenge-117/tyler-wardhaugh/clojure/bb.edn @@ -63,7 +63,9 @@ :task (run-task :t1 *command-line-args*)} task-1-bb {:doc "Run Task 1 (via Babashka)" - :task (run-task-bb :t1 *command-line-args*)} + :task (binding [*out* *err*] + (println "error: can't run Task 1 via Babashka because it depends on an incompatible library.") + (System/exit 1))} task-2 {:doc "Run Task 2 (via clojure)" :task (run-task :t2 *command-line-args*)} diff --git a/challenge-117/tyler-wardhaugh/clojure/deps.edn b/challenge-117/tyler-wardhaugh/clojure/deps.edn index 803cdffd33..b971f3081f 100644 --- a/challenge-117/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-117/tyler-wardhaugh/clojure/deps.edn @@ -1,5 +1,6 @@ {:paths ["src" "resources"] - :deps {org.clojure/clojure {:mvn/version "1.10.3"}} + :deps {org.clojure/clojure {:mvn/version "1.10.3"} + net.cgrand/xforms {:mvn/version "0.19.2"}} :aliases {:test {:extra-paths ["test"] diff --git a/challenge-117/tyler-wardhaugh/clojure/pom.xml b/challenge-117/tyler-wardhaugh/clojure/pom.xml index e133db1508..ed74b5497a 100644 --- a/challenge-117/tyler-wardhaugh/clojure/pom.xml +++ b/challenge-117/tyler-wardhaugh/clojure/pom.xml @@ -24,6 +24,11 @@ <artifactId>clojure</artifactId> <version>1.10.3</version> </dependency> + <dependency> + <groupId>net.cgrand</groupId> + <artifactId>xforms</artifactId> + <version>0.19.2</version> + </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> diff --git a/challenge-117/tyler-wardhaugh/clojure/resources/input-missing-first.txt b/challenge-117/tyler-wardhaugh/clojure/resources/input-missing-first.txt new file mode 100644 index 0000000000..1aa22cf6e4 --- /dev/null +++ b/challenge-117/tyler-wardhaugh/clojure/resources/input-missing-first.txt @@ -0,0 +1,14 @@ +11, Line Eleven +14, Line Fourteen +2, Line two +10, Line Ten +5, Line Five +4, Line Four +12, Line Twelve +6, Line Six +13, Line Thirteen +9, Line Nine +7, Line Seven +3, Line three +8, Line Eight +15, Line Fifteen diff --git a/challenge-117/tyler-wardhaugh/clojure/resources/input-missing-last.txt b/challenge-117/tyler-wardhaugh/clojure/resources/input-missing-last.txt new file mode 100644 index 0000000000..f3e1b20507 --- /dev/null +++ b/challenge-117/tyler-wardhaugh/clojure/resources/input-missing-last.txt @@ -0,0 +1,14 @@ +8, Line Eight +2, Line two +1, Line one +13, Line Thirteen +6, Line Six +4, Line Four +10, Line Ten +14, Line Fourteen +12, Line Twelve +9, Line Nine +5, Line Five +11, Line Eleven +7, Line Seven +3, Line three diff --git a/challenge-117/tyler-wardhaugh/clojure/src/tw/weekly/c117/t1.clj b/challenge-117/tyler-wardhaugh/clojure/src/tw/weekly/c117/t1.clj index 661a1f8fc5..c9e12ee4f6 100644 --- a/challenge-117/tyler-wardhaugh/clojure/src/tw/weekly/c117/t1.clj +++ b/challenge-117/tyler-wardhaugh/clojure/src/tw/weekly/c117/t1.clj @@ -1,17 +1,47 @@ (ns tw.weekly.c117.t1 - (:require [clojure.edn :as edn])) + (:require [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.set :as set] + [net.cgrand.xforms.io :as xio])) ;;; ; Task description for TASK #1 › Missing Row ;;; -(def DEFAULT-INPUT []) +(def DEFAULT-INPUT [(io/resource "input.txt")]) +(def FIRST-ELEM 1) +(def LAST-ELEM 15) -(defn missing-row - [file]) +(defn get-nums + [file] + (->> (xio/lines-in file) + (into (sorted-set) (map edn/read-string)))) + +(defn missing-row-by-set-difference + [file] + (let [present (get-nums file) + population (set (range FIRST-ELEM (inc LAST-ELEM))) + missing (set/difference population present)] + (first missing))) + +(defn missing-row-by-incrementing + [file] + (let [present (conj (get-nums file) + (dec FIRST-ELEM) + (inc LAST-ELEM))] + (-> + (fn [prev curr] + (if (zero? (- curr prev 1)) + curr + (reduced (dec curr)))) + (reduce present)))) + +(def missing-row missing-row-by-set-difference) (defn -main "Run Task 1 with a given input FILE, defaulting to the first example from the task description." [& args] - (let [[FILE] (or (some->> args (map edn/read-string)) DEFAULT-INPUT)] + (let [[FILE] (or + (some->> args (map (comp io/file edn/read-string))) + DEFAULT-INPUT)] (println (missing-row FILE)))) diff --git a/challenge-117/tyler-wardhaugh/clojure/test/tw/weekly/c117_test.clj b/challenge-117/tyler-wardhaugh/clojure/test/tw/weekly/c117_test.clj index 0516bce664..d9547ea900 100644 --- a/challenge-117/tyler-wardhaugh/clojure/test/tw/weekly/c117_test.clj +++ b/challenge-117/tyler-wardhaugh/clojure/test/tw/weekly/c117_test.clj @@ -1,11 +1,20 @@ (ns tw.weekly.c117-test (:require [clojure.test :refer [deftest is testing]] - [tw.weekly.c117.t1 :refer [missing-row]] - [tw.weekly.c117.t2 :refer [find-possible-paths]])) + [clojure.java.io :as io] + [tw.weekly.c117.t1 :as t1] + #_[tw.weekly.c117.t2 :refer [find-possible-paths]])) (deftest task-1 (testing "Task 1, Missing Row" - )) + (let [example (first t1/DEFAULT-INPUT) + m-first (io/resource "input-missing-first.txt") + m-last (io/resource "input-missing-last.txt")] + (is (= 12 (t1/missing-row-by-incrementing example))) + (is (= 12 (t1/missing-row-by-set-difference example))) + (is (= 1 (t1/missing-row-by-incrementing m-first))) + (is (= 1 (t1/missing-row-by-set-difference m-first))) + (is (= 15 (t1/missing-row-by-incrementing m-last))) + (is (= 15 (t1/missing-row-by-set-difference m-last)))))) (deftest task-2 (testing "Task 2, Find Possible Paths" |
