commit b395818b35867113db7d5ceea12cd630c14f8db1
parent 4d1ebe018a49bcd81cb48be2f49552fb20551ba8
Author: Lukas Henkel <lh@entf.net>
Date: Sat, 10 Dec 2022 09:18:23 +0100
Day 10 task 2
Diffstat:
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/src/day10.lisp b/src/day10.lisp
@@ -2,7 +2,10 @@
(:use #:cl #:adventofcode2022))
(in-package #:adventofcode2022/day10)
-(defun task1 (inputs)
+(defun sprite-covers-pixel-p (pixel sprite-pos)
+ (<= (abs (- sprite-pos pixel)) 1))
+
+(defun run-cpu (inputs &key (video-stream t))
(loop with x = 1
with i = 1
for (op value) in inputs
@@ -18,11 +21,24 @@
(= j 140)
(= j 180)
(= j 220))
- sum (* j x))
+ sum (* j x)
+ do (format video-stream "~A"
+ (if (sprite-covers-pixel-p (mod (1- j) 40) x)
+ #\#
+ #\.))
+ when (= 0 (mod j 40))
+ do (format video-stream "~%"))
do (setf i ni)
when (string= op "addx")
do (incf x value)))
+(defun task1 (inputs)
+ (run-cpu inputs))
+
+(defun task2 (inputs)
+ (with-output-to-string (s)
+ (run-cpu inputs :video-stream s)))
+
(define-day 10
(:translate-input (lambda (line)
(let ((parts (uiop:split-string line :separator '(#\Space))))
@@ -30,4 +46,4 @@
(setf (cadr parts) (parse-integer (cadr parts))))
parts)))
#'task1
- nil)
+ #'task2)
diff --git a/t/day10.lisp b/t/day10.lisp
@@ -152,3 +152,15 @@ noop")
(= 13140
(run-task 10 1
(make-string-input-stream +testdata-day10+)))))
+
+(def-test day10-task2 ()
+ (is-true
+ (string= (run-task 10 2
+ (make-string-input-stream +testdata-day10+))
+ "##..##..##..##..##..##..##..##..##..##..
+###...###...###...###...###...###...###.
+####....####....####....####....####....
+#####.....#####.....#####.....#####.....
+######......######......######......####
+#######.......#######.......#######.....
+")))