advent-of-code/2024/3/main.lisp
2024-12-02 21:55:50 -08:00

29 lines
793 B
Common Lisp

(asdf:load-system :cl-ppcre)
(defun solve-1 (line)
(let ((result 0))
(ppcre:do-register-groups (a b)
("mul\\(([0-9]+),([0-9]+)\\)" line result)
(incf result (* (parse-integer a) (parse-integer b))))))
(defun solve-2 (line)
(let ((result 0)
(enabled t))
(ppcre:do-register-groups (mul a b dop dontp)
("(mul\\(([0-9]+),([0-9]+)\\))|(do\\(\\))|(don't\\(\\))" line result)
(declare (ignore mul))
(cond
(dop
(setf enabled t))
(dontp
(setf enabled nil))
(enabled
(incf result (* (parse-integer a) (parse-integer b))))))))
(defun main ()
(let ((input (uiop:read-file-string "data.txt")))
(format t
"1: ~A~%2: ~A~%"
(solve-1 input)
(solve-2 input))))