Skip to content

Instantly share code, notes, and snippets.

@emdeesee
Created December 3, 2024 18:02
Show Gist options
  • Save emdeesee/8565f80114a49991e4a105d6fd025831 to your computer and use it in GitHub Desktop.
Save emdeesee/8565f80114a49991e4a105d6fd025831 to your computer and use it in GitHub Desktop.
AoC2024 Day 3
(defvar *input*
(uiop:read-file-string "day3.txt"))
(defun eval-muls (blob)
(let ((sum 0))
(ppcre:do-register-groups ((#'parse-integer i) (#'parse-integer j))
("mul\\(([0-9]+),([0-9]+)\\)" blob sum)
(incf sum (* i j)))))
(defun eval-muls* (blob)
(let ((do-re "do\\(\\)")
(dont-re "don't\\(\\)"))
(labels ((aux (blob enabled sum)
(cond
((null blob) sum)
(enabled
(multiple-value-bind (mbeg mend) (ppcre:scan dont-re blob)
(let ((current (subseq blob 0 mbeg))
(rest (when mend (subseq blob mend))))
(aux rest (not enabled) (+ sum (eval-muls current))))))
(t ; not enabled
(multiple-value-bind (mbeg mend) (ppcre:scan do-re blob)
(declare (ignore mbeg))
(aux (when mend (subseq blob mend)) (not enabled) sum))))))
(aux blob t 0))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment