Skip to content

Instantly share code, notes, and snippets.

@iwrotesomecode
Last active December 10, 2022 08:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iwrotesomecode/64da2ce8702d62d5557f030ce1752131 to your computer and use it in GitHub Desktop.
Save iwrotesomecode/64da2ce8702d62d5557f030ce1752131 to your computer and use it in GitHub Desktop.
Cathode Ray
(ns aoc2022.day10
(:require [clojure.java.io :as io]
[clojure.string :as str]))
;; Cathode-Ray Tube
(def input (slurp (io/resource "input_10.txt")))
(def demo-input "addx 15\naddx -11\naddx 6\naddx -3\naddx 5\naddx -1\naddx -8\naddx 13\naddx 4\nnoop\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx -35\naddx 1\naddx 24\naddx -19\naddx 1\naddx 16\naddx -11\nnoop\nnoop\naddx 21\naddx -15\nnoop\nnoop\naddx -3\naddx 9\naddx 1\naddx -3\naddx 8\naddx 1\naddx 5\nnoop\nnoop\nnoop\nnoop\nnoop\naddx -36\nnoop\naddx 1\naddx 7\nnoop\nnoop\nnoop\naddx 2\naddx 6\nnoop\nnoop\nnoop\nnoop\nnoop\naddx 1\nnoop\nnoop\naddx 7\naddx 1\nnoop\naddx -13\naddx 13\naddx 7\nnoop\naddx 1\naddx -33\nnoop\nnoop\nnoop\naddx 2\nnoop\nnoop\nnoop\naddx 8\nnoop\naddx -1\naddx 2\naddx 1\nnoop\naddx 17\naddx -9\naddx 1\naddx 1\naddx -3\naddx 11\nnoop\nnoop\naddx 1\nnoop\naddx 1\nnoop\nnoop\naddx -13\naddx -19\naddx 1\naddx 3\naddx 26\naddx -30\naddx 12\naddx -1\naddx 3\naddx 1\nnoop\nnoop\nnoop\naddx -9\naddx 18\naddx 1\naddx 2\nnoop\nnoop\naddx 9\nnoop\nnoop\nnoop\naddx -1\naddx 2\naddx -37\naddx 1\naddx 3\nnoop\naddx 15\naddx -21\naddx 22\naddx -6\naddx 1\nnoop\naddx 2\naddx 1\nnoop\naddx -10\nnoop\nnoop\naddx 20\naddx 1\naddx 2\naddx 2\naddx -6\naddx -11\nnoop\nnoop\nnoop")
(defn process-val [v]
(if (nil? v) [0] [0 (parse-long v)]))
(defn render [[i v]]
(if (<= (dec v) (mod i 40) (inc v)) "█" " "))
(defn part1 [input]
(let [data (->> input
(str/split-lines)
(mapcat (comp process-val second #(str/split % #"\s"))))
sequence (reductions + 1 data)
all-cycles (iterate (partial + 40) 20)
cycles (take-while #(<= % (count sequence)) all-cycles)]
(reduce #(+ %1 (-> (nth sequence (dec %2)) (* %2))) 0 cycles)))
(part1 demo-input)
;; => 13140
(part1 input)
;; => 14920
(defn part2 [input]
(let [data (->> input
(str/split-lines)
(mapcat (comp process-val second #(str/split % #"\s"))))]
(->> (map-indexed vector (reductions + 1 data))
(mapv render)
(partition 40)
(map #(apply str %))
(map #(println %)))))
(part2 input)
;; ███ █ █ ██ ██ ██ ███ █ █ ████
;; █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
;; ███ █ █ █ █ █ █ ███ █ █ █
;; █ █ █ █ █ ████ █ █ █ █ █ █
;; █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
;; ███ ██ ██ █ █ ██ ███ ██ ████
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment