2024 day 3
This commit is contained in:
parent
a7dc708a65
commit
2dea357021
35
2024/3/main.lisp
Normal file
35
2024/3/main.lisp
Normal file
|
@ -0,0 +1,35 @@
|
|||
(asdf:load-system :cl-ppcre)
|
||||
|
||||
(defun solve-1 (line)
|
||||
(let ((result 0))
|
||||
(ppcre:do-register-groups (a b) ("mul\\(([0-9]+),([0-9]+)\\)" line)
|
||||
(incf result (* (parse-integer a) (parse-integer b))))
|
||||
result))
|
||||
|
||||
(defun solve-2 (line)
|
||||
(let ((result 0)
|
||||
(enabled t))
|
||||
(ppcre:do-scans (start
|
||||
end
|
||||
starts
|
||||
ends
|
||||
"(mul\\(([0-9]+),([0-9]+)\\))|(do\\(\\))|(don't\\(\\))"
|
||||
line)
|
||||
(let ((str (subseq line start end)))
|
||||
(cond
|
||||
((string= str "do()")
|
||||
(setf enabled t))
|
||||
((string= str "don't()")
|
||||
(setf enabled nil))
|
||||
(enabled
|
||||
(let ((a (subseq line (aref starts 1) (aref ends 1)))
|
||||
(b (subseq line (aref starts 2) (aref ends 2))))
|
||||
(incf result (* (parse-integer a) (parse-integer b))))))))
|
||||
result))
|
||||
|
||||
(defun main ()
|
||||
(let ((input (uiop:read-file-string "data.txt")))
|
||||
(format t
|
||||
"1: ~A~%2: ~A~%"
|
||||
(solve-1 input)
|
||||
(solve-2 input))))
|
Loading…
Reference in a new issue