From 2a3c0e7c55f644f7af7b8a814357dc6942ed3aac Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Tue, 21 Dec 2021 17:32:46 +0100 Subject: day20 --- day20.clj | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 day20.clj (limited to 'day20.clj') diff --git a/day20.clj b/day20.clj new file mode 100644 index 0000000..933460f --- /dev/null +++ b/day20.clj @@ -0,0 +1,36 @@ +(ns org.vuxu.aoc2021.day20 + (:require [clojure.string :as str])) + +(let [[enhance image] (str/split (slurp "day20") #"\n\n")] + (def enhance (mapv {\# 1 \. 0} enhance)) + (def image (mapv (partial mapv {\# 1 \. 0}) (str/split-lines image)))) + +(defn neighbour-offsets [x y] + (let [digits [-1 0 1]] + (for [dx digits + dy digits] + [(+ x dx) (+ y dy)]))) + +(defn bin2int [bin] + (Integer/parseInt (apply str bin) 2)) + +(defn tick [[image i]] + (let [background (if (zero? (enhance 0)) + 0 + (mod i 2))] + [(vec (for [y (range -1 (inc (count image)))] + (vec (for [x (range -1 (inc (count (first image))))] + (enhance (->> (neighbour-offsets y x) + (map #(get-in image % background)) + bin2int)))))) + (inc i)])) + +(def part1 + (count (filter (complement zero?) + (flatten (first (nth (iterate tick [image 0]) 2)))))) +;; => 5229 + +(def part2 + (count (filter (complement zero?) + (flatten (first (nth (iterate tick [image 0]) 50))))) +;; => 17009 -- cgit 1.4.1