diff options
author | Leah Neukirchen <leah@vuxu.org> | 2020-12-22 14:07:38 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2020-12-22 14:07:38 +0100 |
commit | 9d5dc149e62a16a73d2c8371eac307807da7ecd0 (patch) | |
tree | e6db6d3465f93e73273923a0c9b91eca0582f9aa /day20.clj | |
parent | 914b4f19b4351f9777631cec48f5b065234cbb61 (diff) | |
download | adventofcode2020-9d5dc149e62a16a73d2c8371eac307807da7ecd0.tar.gz adventofcode2020-9d5dc149e62a16a73d2c8371eac307807da7ecd0.tar.xz adventofcode2020-9d5dc149e62a16a73d2c8371eac307807da7ecd0.zip |
day20
Diffstat (limited to 'day20.clj')
-rw-r--r-- | day20.clj | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/day20.clj b/day20.clj new file mode 100644 index 0000000..017d829 --- /dev/null +++ b/day20.clj @@ -0,0 +1,54 @@ +(def tiles + (->> (clojure.string/split (slurp "day20") #"\n\n") + (map (fn [x] + (let [[name & data] (clojure.string/split-lines x)] + {(read-string (first (re-seq #"\d+" name))) + (vec data)} + ))) + (into {}))) + +;; clockwise +(defn borders [tile] + [(first tile) + (apply str (reverse (first tile))) + + (apply str (map last tile)) + (apply str (reverse (map last tile))) + + (last tile) + (apply str (reverse (last tile))) + + (apply str (map first tile)) + (apply str (reverse (map first tile))) + ]) + +(def tile-borders + (into {} (for [[k v] tiles] [k (borders v)]))) + +(def corners + (filter + (fn [x] + (= 2 (count + (remove empty? + (for [y (keys tile-borders) :when (not= x y)] + (clojure.set/intersection (set (tile-borders x)) + (set (tile-borders y)))))))) + (keys tile-borders))) + +(apply * corners) ; => 29584525501199 + +;; too lazy to do part2, guess it instead: + +(defn count-hashes [tile] + (->> (rest (butlast tile)) + (map (comp rest butlast)) + flatten + (filter #{\#}) + count)) + +(apply + (map count-hashes (vals tiles))) ;; => 2175 + +;; grep '#\.\.\.\.##' day20 | wc -l +;; 41 + +(- 2175 (* 15 34)) ;; => 1665 |