From 5ff78d12414b9c756fab419896cbc4d561188080 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sun, 12 Dec 2021 01:50:27 +0100 Subject: day11 --- day11 | 10 ++++++++++ day11.bqn | 14 ++++++++++++++ day11.clj | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 day11 create mode 100644 day11.bqn create mode 100644 day11.clj diff --git a/day11 b/day11 new file mode 100644 index 0000000..95f25a9 --- /dev/null +++ b/day11 @@ -0,0 +1,10 @@ +4781623888 +1784156114 +3265645122 +4371551414 +3377154886 +7882314455 +6421348681 +7175424287 +5488242184 +2448568261 diff --git a/day11.bqn b/day11.bqn new file mode 100644 index 0000000..03d4dcd --- /dev/null +++ b/day11.bqn @@ -0,0 +1,14 @@ +While ← {𝕩{π”½βŸπ”Ύβˆ˜π”½_𝕣_π”Ύβˆ˜π”½βŸπ”Ύπ•©}𝕨@}Β΄ +d←>'0'-Λœβ€’FLines"day11" + +Step ← { + g←f←0Γ— x←𝕩+1 + While {𝕀 β‹„ f β‰’ f ∨ g ↩ (Β¬f) ∧ x>9 }β€Ώ{𝕀 + x +↩ (+Β΄+˝)βŽ‰2 3β€Ώ3↕{βŒ½β‰0βˆΎΛ˜π•©}⍟4 g + f βˆ¨β†© g + } + x Γ— Β¬f∨g +} + +β€’Out +Β΄{+Β΄β₯Š0=𝕩}Β¨ Step⍟(↕101) d +β€’Out 0 {∧´0=β₯Šπ•© ? 𝕨 ; (𝕨+1) π•Š Step 𝕩} d diff --git a/day11.clj b/day11.clj new file mode 100644 index 0000000..0b34170 --- /dev/null +++ b/day11.clj @@ -0,0 +1,51 @@ +(ns org.vuxu.aoc2021.day11 + (:require [clojure.string :as str] + [clojure.set :as set])) + +;; attribution: https://www.reddit.com/r/adventofcode/comments/rds32p/2021_day_11_solutions/ho4d867/ + +(defn parse-digit [char] + (Character/digit char 10)) + +(def data + (->> (slurp "day11") + (str/split-lines) + (mapv (partial mapv parse-digit)))) + +(def datamap + (zipmap (for [x (range (count data)) + y (range (count (data x)))] + [x y]) + (flatten data))) + +(defn neighbours [[x y]] + (for [dx [-1 0 1] + dy [-1 0 1] + :when (< -1 (+ x dx) (count data)) + :when (< -1 (+ y dy) (count (first data)))] + [(+ x dx) (+ y dy)])) + +(defn trigger [flashed grid] + (let [flashing (set/difference + (set (map first (filter (fn [[k v]] (> v 9)) grid))) + flashed) + new-grid (reduce (fn [g p] (update g p inc)) + grid + (mapcat neighbours flashing))] + (if (empty? flashing) + [flashed grid] + (trigger (set/union flashed flashing) new-grid)))) + +(defn step [[_ grid]] + (let [[flashed updated] (trigger #{} (update-vals grid inc))] + [(count flashed) + (apply merge updated (map #(vector % 0) flashed))])) + +(def part1 + (apply + (take 101 (map first (iterate step [0 datamap]))))) +;; => 1713 + +(def part2 + (count (take-while #(< % (* (count data) (count (first data)))) + (map first (iterate step [0 datamap]))))) +;; => 502 -- cgit 1.4.1