Last active
December 10, 2022 08:02
-
-
Save iwrotesomecode/64da2ce8702d62d5557f030ce1752131 to your computer and use it in GitHub Desktop.
Cathode Ray
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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