aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <twardhaugh@cap-rx.com>2021-06-14 14:54:56 -0700
committerTyler Wardhaugh <twardhaugh@cap-rx.com>2021-06-15 09:02:50 -0700
commit3d37b2d24933141599134e34af2a9fa3e9ee1c58 (patch)
tree5bdf6336278c4b3a2343e512bcdf711bb39375df
parent410749b2ee37521a4bcdc5f287c4c995f5501bbb (diff)
downloadperlweeklychallenge-club-3d37b2d24933141599134e34af2a9fa3e9ee1c58.tar.gz
perlweeklychallenge-club-3d37b2d24933141599134e34af2a9fa3e9ee1c58.tar.bz2
perlweeklychallenge-club-3d37b2d24933141599134e34af2a9fa3e9ee1c58.zip
Ch117 (Clojure): Task 1
-rw-r--r--challenge-117/tyler-wardhaugh/clojure/bb.edn4
-rw-r--r--challenge-117/tyler-wardhaugh/clojure/deps.edn3
-rw-r--r--challenge-117/tyler-wardhaugh/clojure/pom.xml5
-rw-r--r--challenge-117/tyler-wardhaugh/clojure/resources/input-missing-first.txt14
-rw-r--r--challenge-117/tyler-wardhaugh/clojure/resources/input-missing-last.txt14
-rw-r--r--challenge-117/tyler-wardhaugh/clojure/src/tw/weekly/c117/t1.clj40
-rw-r--r--challenge-117/tyler-wardhaugh/clojure/test/tw/weekly/c117_test.clj15
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"