(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))))