From 8ac20241c93ef16200b33441e9c80f002227e95a Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 8 Dec 2024 00:58:18 -0500 Subject: [PATCH] init day 8 --- 2024/bb.edn | 3 ++- 2024/input/8.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 2024/src/day08.clj | 44 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 2024/input/8.txt create mode 100644 2024/src/day08.clj diff --git a/2024/bb.edn b/2024/bb.edn index 4114953..df4e00a 100644 --- a/2024/bb.edn +++ b/2024/bb.edn @@ -1,3 +1,4 @@ -{:deps {org.clojure/clojure {:mvn/version "1.12.0"}} +{:deps {org.clojure/clojure {:mvn/version "1.12.0"} + org.clojure/math.combinatorics {:mvn/version "0.3.0"}} :paths ["src"] :tasks {}} diff --git a/2024/input/8.txt b/2024/input/8.txt new file mode 100644 index 0000000..8ab4006 --- /dev/null +++ b/2024/input/8.txt @@ -0,0 +1,50 @@ +........5................r..................B..... +....................................V..B.......... +...........................................B...... +r..................C....................Y......N.. +............................C..................... +vb.r........9......x..................7........... +..v........C.........................U...7.N..6... +5............9..................n.B............... +....r........4....................0.....K.....Y... +..4...C............7.......U..........6........... +......4z....................n.......U....6........ +..............b...........N..........n............ +.......9............x.....V..............K........ +.....v......................................2..... +.....V........Z........n.......................... +....z..........................VU......K.......... +...b....z..............................Y.......... +.z.......Z..................................K..... +..b.................................7............. +.4x............................................... +.h.......................5........................ +.................................g................ +..............9....0.........c................d... +......h.................u.............c........2.d +.....................8........N.....c...2.T....... +......Z..h.......................................c +........H........d................................ +........................................d......... +.Z........................................k....... +...............................T...............6.. +q..............Q...X..O............2.............. +..............................O.8......D.......... +........X............................O............ +.........t......................T................. +..........................t...8.......Q......u.... +.................Q.....O.......................... +..........hj.......o..............JR....u......... +..........X..........ot.........3.R............... +.......J.............y.....3.....................g +............y..J.Xj......R..........G............. +.....................t.........H.....D..g...G..... +........J.......o......y.......k.................. +..................1............................... +.....................3....k.......q.........1..... +...........v......................3k.............. +...................1......Q...H............G...... +.............1y......T............j............... +......0............8..................D........u.. +.............................G....D...o....q...... +...............j.0...H............................ diff --git a/2024/src/day08.clj b/2024/src/day08.clj new file mode 100644 index 0000000..457796f --- /dev/null +++ b/2024/src/day08.clj @@ -0,0 +1,44 @@ +(ns day08 + (:require + [core :as c] + [input-manager :refer [get-input]] + [clojure.math.combinatorics :as combo] + [clojure.set :refer [union]])) + +(def input (mapv vec (get-input 8))) + +(defn get-char [[row col]] + (get (get input row) col)) + +(def locs (->> input + c/get-coords + (map #(vector (get-char %) %)) + (group-by first) + (#(dissoc % \.)) + (#(update-vals % (partial mapv second))))) + +(defn get-antinode-pos [[x1 y1] [x2 y2] multiplier] + (vector (+ x1 (* multiplier (- x2 x1))) + (+ y1 (+ (* multiplier (- y2 y1)))))) + +(defn get-antinodes [[a b]] + (filterv #(get-char %) [(get-antinode-pos a b 2) (get-antinode-pos b a 2)])) + +;; part 1 +(->> locs + vals + (map #(->> (combo/combinations % 2) (mapcat get-antinodes) set)) + (reduce union) + (count)) + +(defn get-antinodes-2 [[a b]] + (concat (take-while get-char (map #(get-antinode-pos a b %) (range))) + (take-while get-char (map #(get-antinode-pos b a %) (range))))) + +;; part 2 +(->> locs + vals + (map #(->> (combo/combinations % 2) (mapcat get-antinodes-2) set)) + (reduce union) + (count)) +