~shunter/advent2019

5559eb44a28883905d087c13c799cf5847842d64 — Samuel Hunter 4 years ago 9c7cae5
Solve Day 17
2 files changed, 94 insertions(+), 4 deletions(-)

M input/day17.txt
M src/day17.lisp
M input/day17.txt => input/day17.txt +1 -1
@@ 1,1 1,1 @@
()
(1 330 331 332 109 3914 1101 0 1182 15 1102 1 1457 24 1002 0 1 570 1006 570 36 1002 571 1 0 1001 570 -1 570 1001 24 1 24 1106 0 18 1008 571 0 571 1001 15 1 15 1008 15 1457 570 1006 570 14 21102 1 58 0 1105 1 786 1006 332 62 99 21102 333 1 1 21101 0 73 0 1105 1 579 1101 0 0 572 1101 0 0 573 3 574 101 1 573 573 1007 574 65 570 1005 570 151 107 67 574 570 1005 570 151 1001 574 -64 574 1002 574 -1 574 1001 572 1 572 1007 572 11 570 1006 570 165 101 1182 572 127 1002 574 1 0 3 574 101 1 573 573 1008 574 10 570 1005 570 189 1008 574 44 570 1006 570 158 1106 0 81 21102 1 340 1 1105 1 177 21102 477 1 1 1106 0 177 21102 1 514 1 21101 0 176 0 1105 1 579 99 21102 1 184 0 1105 1 579 4 574 104 10 99 1007 573 22 570 1006 570 165 102 1 572 1182 21101 375 0 1 21101 0 211 0 1106 0 579 21101 1182 11 1 21102 1 222 0 1105 1 979 21102 388 1 1 21101 0 233 0 1106 0 579 21101 1182 22 1 21102 244 1 0 1106 0 979 21101 0 401 1 21101 255 0 0 1105 1 579 21101 1182 33 1 21101 266 0 0 1106 0 979 21101 0 414 1 21102 277 1 0 1105 1 579 3 575 1008 575 89 570 1008 575 121 575 1 575 570 575 3 574 1008 574 10 570 1006 570 291 104 10 21102 1182 1 1 21101 0 313 0 1106 0 622 1005 575 327 1102 1 1 575 21101 327 0 0 1105 1 786 4 438 99 0 1 1 6 77 97 105 110 58 10 33 10 69 120 112 101 99 116 101 100 32 102 117 110 99 116 105 111 110 32 110 97 109 101 32 98 117 116 32 103 111 116 58 32 0 12 70 117 110 99 116 105 111 110 32 65 58 10 12 70 117 110 99 116 105 111 110 32 66 58 10 12 70 117 110 99 116 105 111 110 32 67 58 10 23 67 111 110 116 105 110 117 111 117 115 32 118 105 100 101 111 32 102 101 101 100 63 10 0 37 10 69 120 112 101 99 116 101 100 32 82 44 32 76 44 32 111 114 32 100 105 115 116 97 110 99 101 32 98 117 116 32 103 111 116 58 32 36 10 69 120 112 101 99 116 101 100 32 99 111 109 109 97 32 111 114 32 110 101 119 108 105 110 101 32 98 117 116 32 103 111 116 58 32 43 10 68 101 102 105 110 105 116 105 111 110 115 32 109 97 121 32 98 101 32 97 116 32 109 111 115 116 32 50 48 32 99 104 97 114 97 99 116 101 114 115 33 10 94 62 118 60 0 1 0 -1 -1 0 1 0 0 0 0 0 0 1 0 16 0 109 4 2102 1 -3 586 21001 0 0 -1 22101 1 -3 -3 21102 0 1 -2 2208 -2 -1 570 1005 570 617 2201 -3 -2 609 4 0 21201 -2 1 -2 1106 0 597 109 -4 2106 0 0 109 5 2102 1 -4 629 21001 0 0 -2 22101 1 -4 -4 21102 1 0 -3 2208 -3 -2 570 1005 570 781 2201 -4 -3 653 20101 0 0 -1 1208 -1 -4 570 1005 570 709 1208 -1 -5 570 1005 570 734 1207 -1 0 570 1005 570 759 1206 -1 774 1001 578 562 684 1 0 576 576 1001 578 566 692 1 0 577 577 21101 0 702 0 1106 0 786 21201 -1 -1 -1 1106 0 676 1001 578 1 578 1008 578 4 570 1006 570 724 1001 578 -4 578 21101 731 0 0 1106 0 786 1106 0 774 1001 578 -1 578 1008 578 -1 570 1006 570 749 1001 578 4 578 21101 0 756 0 1105 1 786 1106 0 774 21202 -1 -11 1 22101 1182 1 1 21101 774 0 0 1105 1 622 21201 -3 1 -3 1106 0 640 109 -5 2105 1 0 109 7 1005 575 802 21002 576 1 -6 21002 577 1 -5 1105 1 814 21101 0 0 -1 21102 1 0 -5 21102 1 0 -6 20208 -6 576 -2 208 -5 577 570 22002 570 -2 -2 21202 -5 63 -3 22201 -6 -3 -3 22101 1457 -3 -3 2101 0 -3 843 1005 0 863 21202 -2 42 -4 22101 46 -4 -4 1206 -2 924 21102 1 1 -1 1106 0 924 1205 -2 873 21102 35 1 -4 1106 0 924 1202 -3 1 878 1008 0 1 570 1006 570 916 1001 374 1 374 1201 -3 0 895 1102 2 1 0 1202 -3 1 902 1001 438 0 438 2202 -6 -5 570 1 570 374 570 1 570 438 438 1001 578 558 921 21001 0 0 -4 1006 575 959 204 -4 22101 1 -6 -6 1208 -6 63 570 1006 570 814 104 10 22101 1 -5 -5 1208 -5 39 570 1006 570 810 104 10 1206 -1 974 99 1206 -1 974 1102 1 1 575 21102 1 973 0 1106 0 786 99 109 -7 2105 1 0 109 6 21101 0 0 -4 21101 0 0 -3 203 -2 22101 1 -3 -3 21208 -2 82 -1 1205 -1 1030 21208 -2 76 -1 1205 -1 1037 21207 -2 48 -1 1205 -1 1124 22107 57 -2 -1 1205 -1 1124 21201 -2 -48 -2 1105 1 1041 21101 -4 0 -2 1106 0 1041 21102 -5 1 -2 21201 -4 1 -4 21207 -4 11 -1 1206 -1 1138 2201 -5 -4 1059 2101 0 -2 0 203 -2 22101 1 -3 -3 21207 -2 48 -1 1205 -1 1107 22107 57 -2 -1 1205 -1 1107 21201 -2 -48 -2 2201 -5 -4 1090 20102 10 0 -1 22201 -2 -1 -2 2201 -5 -4 1103 2101 0 -2 0 1106 0 1060 21208 -2 10 -1 1205 -1 1162 21208 -2 44 -1 1206 -1 1131 1105 1 989 21102 439 1 1 1106 0 1150 21101 0 477 1 1105 1 1150 21101 0 514 1 21101 1149 0 0 1105 1 579 99 21101 1157 0 0 1105 1 579 204 -2 104 10 99 21207 -3 22 -1 1206 -1 1138 2102 1 -5 1176 2101 0 -4 0 109 -6 2105 1 0 46 11 52 1 9 1 52 1 9 1 52 1 9 1 12 7 33 1 9 1 12 1 5 1 33 1 9 1 12 1 5 1 9 1 23 1 9 1 12 1 5 1 9 1 23 1 9 1 12 1 5 1 9 1 23 1 9 1 12 1 5 1 9 1 23 1 9 1 12 1 5 13 19 13 12 1 15 1 1 1 19 1 1 1 22 1 15 13 5 7 22 1 17 1 9 1 5 1 3 1 24 1 17 1 9 1 5 1 3 1 24 1 17 1 9 1 5 1 3 1 18 7 17 13 3 1 1 9 46 1 1 1 3 1 1 1 1 1 5 1 46 13 3 1 48 1 3 1 1 1 1 1 1 1 3 1 48 1 3 13 46 1 5 1 1 1 1 1 3 1 1 1 46 9 1 1 3 13 42 1 3 1 5 1 9 1 42 1 3 1 5 1 9 1 42 1 3 1 5 1 9 1 40 7 5 1 9 1 40 1 1 1 9 1 9 1 30 13 9 1 9 1 30 1 9 1 11 1 9 1 30 1 9 1 11 1 9 1 30 1 9 1 11 1 9 1 30 1 9 1 11 11 30 1 9 1 52 1 9 1 52 1 9 1 52 1 9 1 52 1 9 1 52 11 22)

M src/day17.lisp => src/day17.lisp +93 -3
@@ 5,8 5,98 @@

(in-package #:aoc2019.17)

(defparameter *input* (read-day 17))
(defparameter *tape* (read-tape 17))

(defun solve-part1 ())
(defparameter +empty+ #.(char-code #\.))
(defparameter +scaffold+ #.(char-code #\#))
(defparameter +bot+ #.(char-code #\^))

(defun solve-part2 ())
(defun dimensions ()
  (let ((arch (make-architecture *base-arch*))
        (width 0)
        (height -1)
        (counting-width-p t))
    (defop (arch 04) (src)
      (cond
        ((= src 10) (setf counting-width-p nil))
        (counting-width-p (incf width)))
      (when (= src 10) (incf height)))

    (eval-tape arch *tape*)
    (list width height)))

(defun make-grid ()
  (let ((arch (make-architecture *base-arch*))
        (grid (make-array (dimensions)))
        (x 0) (y 0))
    (defop (arch 04) (src)
      (if (= src 10)
          (progn (setf x 0) (incf y))
          (progn (setf (aref grid x y) src) (incf x))))

    (eval-tape arch *tape*)
    grid))

(defun code-elm (code)
  (ecase code
    (46 :empty)
    (35 :scaffold)
    (94 :bot)))

(defun elm-code (elm)
  (ecase elm
    (:empty #\.)
    (:scaffold #\#)
    (:bot #\^)))

(defun draw-platform ()
  (let ((arch (make-architecture *base-arch*)))
    (defop (arch 04) (src)
      (write-char (code-char src)))
    (eval-tape arch *tape*)))

(defun intersectionp (grid x y)
  (destructuring-bind (width height) (array-dimensions grid)
    (when (or (= x 0) (= x (1- width))
              (= y 0) (= y (1- height)))
      (return-from intersectionp nil))

    (and (eq +scaffold+ (aref grid x y))
         (eq +scaffold+ (aref grid x (1- y)))
         (eq +scaffold+ (aref grid (1- x) y))
         (eq +scaffold+ (aref grid x (1+ y)))
         (eq +scaffold+ (aref grid (1+ x) y)))))

(defun solve-part1 ()
  (loop :with grid := (make-grid)
        :with (width height) := (array-dimensions grid)
        :for x :below width
        :sum (loop :for y :below height
                   :when (intersectionp grid x y)
                     :sum (* x y))))


(defun make-working-tape ()
  (let ((result (make-tape *tape*)))
    (setf (aref result 0) 2)
    result))

(defun solve-part2 ()
  ;; Not automated whatsoever.
  (let ((arch (make-architecture *base-arch*))
        (last-num 0))

    (defop (arch 04) (src)
      (setf last-num src)
      (write-char (code-char src)))

    (defop (arch 03) (dest)
      (setf dest (let ((char (read-char)))
                   (if (char-equal char #\.)
                       #.(char-code #\,)
                       (char-code char)))))

    (defop (arch 99) ()
      (halt last-num))

    (eval-tape arch (make-working-tape))))