src/2019/days/day-11.lisp @ e41337e3b59b
Accessors
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 15 Dec 2021 23:10:57 -0500 |
parents |
182bdd87fd9e |
children |
(none) |
(advent:defpackage* :advent/2019/11)
(in-package :advent/2019/11)
(defun run-robot (program &key (origin 'black))
(let ((panels (make-hash-table))
(mode '#1=(paint walk . #1#))
(pos #c(0 0))
(heading #c(0 1)))
(labels ((color ()
(gethash pos panels 0))
(paint (color)
(setf (gethash pos panels) color))
(turn (direction)
(mulf heading
(ecase direction
(0 #c(0 1))
(1 #c(0 -1)))))
(walk (direction)
(turn direction)
(incf pos heading))
(exec (input)
(ecase (pop mode)
(paint (paint input))
(walk (walk input)))))
(paint (ecase origin
(black 0)
(white 1)))
(advent/intcode:run program :input #'color :output #'exec))
panels))
(defun draw-panels (panels)
(draw-bitmap (alexandria:hash-table-alist panels)
"out/2019-11.pbm"
:flip-vertically t))
(define-problem (2019 11) (data read-numbers) (1907)
(draw-panels (run-robot data :origin 'white))
(hash-table-count (run-robot data)))
#; Scratch --------------------------------------------------------------------