commit 4d1ebe018a49bcd81cb48be2f49552fb20551ba8
parent ae00a8b11cf840d7907a3bee3c85f5915f9510d7
Author: Lukas Henkel <lh@entf.net>
Date: Sat, 10 Dec 2022 09:00:54 +0100
Day 10 task 1
Diffstat:
4 files changed, 331 insertions(+), 2 deletions(-)
diff --git a/adventofcode2022.asd b/adventofcode2022.asd
@@ -15,7 +15,8 @@
(:file "day06")
(:file "day07")
(:file "day08")
- (:file "day09")))
+ (:file "day09")
+ (:file "day10")))
(defsystem "adventofcode2022/test"
:description "My solutions to the advent of code 2022"
@@ -34,4 +35,5 @@
(:file "day06")
(:file "day07")
(:file "day08")
- (:file "day09")))
+ (:file "day09")
+ (:file "day10")))
diff --git a/input/day10.txt b/input/day10.txt
@@ -0,0 +1,140 @@
+addx 1
+addx 4
+noop
+noop
+noop
+addx 5
+addx 3
+noop
+addx 2
+noop
+noop
+noop
+noop
+addx 3
+addx 5
+addx 2
+addx 1
+noop
+addx 5
+addx -1
+addx 5
+noop
+addx 3
+noop
+addx -40
+noop
+addx 38
+addx -31
+addx 3
+noop
+addx 2
+addx -7
+addx 8
+addx 2
+addx 5
+addx 2
+addx 3
+addx -2
+noop
+noop
+noop
+addx 5
+addx 2
+noop
+addx 3
+addx 2
+noop
+addx 3
+addx -36
+noop
+noop
+addx 5
+noop
+noop
+addx 8
+addx -5
+addx 5
+addx 2
+addx -15
+addx 16
+addx 4
+noop
+addx 1
+noop
+noop
+addx 4
+addx 5
+addx -30
+addx 35
+addx -1
+addx 2
+addx -36
+addx 5
+noop
+noop
+addx -2
+addx 5
+addx 2
+addx 3
+noop
+addx 2
+noop
+noop
+addx 5
+noop
+addx 14
+addx -13
+addx 5
+addx -14
+addx 18
+addx 3
+addx 2
+addx -2
+addx 5
+addx -40
+noop
+addx 32
+addx -25
+addx 3
+noop
+addx 2
+addx 3
+addx -2
+addx 2
+addx 2
+noop
+addx 3
+addx 5
+addx 2
+addx 9
+addx -36
+addx 30
+addx 5
+addx 2
+addx -25
+addx 26
+addx -38
+addx 10
+addx -3
+noop
+noop
+addx 22
+addx -16
+addx -1
+addx 5
+addx 3
+noop
+addx 2
+addx -20
+addx 21
+addx 3
+addx 2
+addx -24
+addx 28
+noop
+addx 5
+addx 3
+noop
+addx -24
+noop
diff --git a/src/day10.lisp b/src/day10.lisp
@@ -0,0 +1,33 @@
+(defpackage #:adventofcode2022/day10
+ (:use #:cl #:adventofcode2022))
+(in-package #:adventofcode2022/day10)
+
+(defun task1 (inputs)
+ (loop with x = 1
+ with i = 1
+ for (op value) in inputs
+ for ni = i
+ if (string= op "addx")
+ do (incf ni 2)
+ else
+ do (incf ni 1)
+ sum (loop for j from i below ni
+ when (or (= j 20)
+ (= j 60)
+ (= j 100)
+ (= j 140)
+ (= j 180)
+ (= j 220))
+ sum (* j x))
+ do (setf i ni)
+ when (string= op "addx")
+ do (incf x value)))
+
+(define-day 10
+ (:translate-input (lambda (line)
+ (let ((parts (uiop:split-string line :separator '(#\Space))))
+ (when (cadr parts)
+ (setf (cadr parts) (parse-integer (cadr parts))))
+ parts)))
+ #'task1
+ nil)
diff --git a/t/day10.lisp b/t/day10.lisp
@@ -0,0 +1,154 @@
+(in-package #:adventofcode2022/test)
+
+(defconstant +testdata-day10+ "addx 15
+addx -11
+addx 6
+addx -3
+addx 5
+addx -1
+addx -8
+addx 13
+addx 4
+noop
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx -35
+addx 1
+addx 24
+addx -19
+addx 1
+addx 16
+addx -11
+noop
+noop
+addx 21
+addx -15
+noop
+noop
+addx -3
+addx 9
+addx 1
+addx -3
+addx 8
+addx 1
+addx 5
+noop
+noop
+noop
+noop
+noop
+addx -36
+noop
+addx 1
+addx 7
+noop
+noop
+noop
+addx 2
+addx 6
+noop
+noop
+noop
+noop
+noop
+addx 1
+noop
+noop
+addx 7
+addx 1
+noop
+addx -13
+addx 13
+addx 7
+noop
+addx 1
+addx -33
+noop
+noop
+noop
+addx 2
+noop
+noop
+noop
+addx 8
+noop
+addx -1
+addx 2
+addx 1
+noop
+addx 17
+addx -9
+addx 1
+addx 1
+addx -3
+addx 11
+noop
+noop
+addx 1
+noop
+addx 1
+noop
+noop
+addx -13
+addx -19
+addx 1
+addx 3
+addx 26
+addx -30
+addx 12
+addx -1
+addx 3
+addx 1
+noop
+noop
+noop
+addx -9
+addx 18
+addx 1
+addx 2
+noop
+noop
+addx 9
+noop
+noop
+noop
+addx -1
+addx 2
+addx -37
+addx 1
+addx 3
+noop
+addx 15
+addx -21
+addx 22
+addx -6
+addx 1
+noop
+addx 2
+addx 1
+noop
+addx -10
+noop
+noop
+addx 20
+addx 1
+addx 2
+addx 2
+addx -6
+addx -11
+noop
+noop
+noop")
+
+(def-test day10-task1 ()
+ (is-true
+ (= 13140
+ (run-task 10 1
+ (make-string-input-stream +testdata-day10+)))))