feat(tazjin/aoc2020): Add solution for day 8, part 1

I'm too tired for part 2.

Change-Id: Ic7058344806466276e3792e9ff9bbf660a18f672
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2239
Reviewed-by: tazjin <mail@tazj.in>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2020-12-09 00:10:00 +01:00 committed by tazjin
parent 3061b3228f
commit 93f0ab5af8

View file

@ -0,0 +1,33 @@
;; Advent of Code 2020 - Day
(require 'cl-lib)
(require 'dash)
(require 'f)
(require 's)
(setq day8/input
(apply #'vector
(-map (lambda (s)
(pcase-let ((`(,op ,val) (s-split " " s t)))
(cons (intern op) (string-to-number val))))
(s-lines (s-chomp (f-read "/tmp/aoc/day8.txt"))))))
(defun day8/step (code position acc)
(let ((current (aref code position)))
(aset code position nil)
(pcase current
('() (cons 'final acc))
(`(nop . ,val) (cons (+ position 1) acc))
(`(acc . ,val) (cons (+ position 1) (+ acc val)))
(`(jmp . ,val) (cons (+ position val) acc)))))
;; Puzzle 1
(message "Solution to day8/1: %s"
(let ((code (copy-sequence day8/input))
(position 0)
(acc 0))
(cl-loop for next = (day8/step code position acc)
when (equal 'final (car next)) return (cdr next)
do (setq position (car next))
do (setq acc (cdr next)))))