aboutsummaryrefslogtreecommitdiff
path: root/2019/13/puzzle-2.lisp
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-12-18 20:37:45 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-12-18 20:37:45 +0100
commit35e57f6e59423272fd4a45b2535c369cb61182b5 (patch)
treefb67212bc14a1abc0bb53eac10fbd8e0b9a598cf /2019/13/puzzle-2.lisp
parent3e4fca1014d8b27d1a852f74e998d9f1d35930f4 (diff)
Add 2019 day 13 solutions
Diffstat (limited to '2019/13/puzzle-2.lisp')
-rwxr-xr-x2019/13/puzzle-2.lisp33
1 files changed, 33 insertions, 0 deletions
diff --git a/2019/13/puzzle-2.lisp b/2019/13/puzzle-2.lisp
new file mode 100755
index 0000000..66dd33d
--- /dev/null
+++ b/2019/13/puzzle-2.lisp
@@ -0,0 +1,33 @@
+#!/usr/bin/sbcl --script
+
+(load "../interpreter.lisp")
+
+(defun sign (x)
+ (cond ((minusp x) -1)
+ ((plusp x) +1)
+ (:else 0)))
+
+(defun main (filename)
+ (let ((program (intcode:parse filename))
+ (part 0) score
+ ball-x paddle-x
+ msg-x msg-y msg-z)
+ (setf (aref program 0) 2)
+ (intcode:run
+ program
+ (lambda ()
+ (sign (- ball-x paddle-x)))
+ (lambda (msg)
+ (ecase part
+ (0 (setq msg-x msg))
+ (1 (setq msg-y msg))
+ (2 (case msg
+ (3 (setq paddle-x msg-x))
+ (4 (setq ball-x msg-x))
+ (otherwise
+ (when (and (= msg-x -1) (= msg-y 0))
+ (setq score msg))))))
+ (setq part (mod (1+ part) 3))))
+ score))
+
+(format t "~d~%" (main "input")) \ No newline at end of file