diff options
author | Oscar Najera <hi@oscarnajera.com> | 2022-12-05 00:04:50 +0100 |
---|---|---|
committer | Oscar Najera <hi@oscarnajera.com> | 2022-12-05 00:04:50 +0100 |
commit | 92f0857f8f3644e31739f63628156c4b0384b3ac (patch) | |
tree | 61b266d79fd2575e208718339e848f7c93adb293 /AoC2022/04/solver.lisp | |
parent | 976fafe4bfee6b66218b0ce0f0481624c5fe2f02 (diff) | |
download | scratch-92f0857f8f3644e31739f63628156c4b0384b3ac.tar.gz scratch-92f0857f8f3644e31739f63628156c4b0384b3ac.tar.bz2 scratch-92f0857f8f3644e31739f63628156c4b0384b3ac.zip |
[AoC2022] Elisp + common lisp 04
Diffstat (limited to 'AoC2022/04/solver.lisp')
-rw-r--r-- | AoC2022/04/solver.lisp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/AoC2022/04/solver.lisp b/AoC2022/04/solver.lisp index 0a4077f..bcf37d7 100644 --- a/AoC2022/04/solver.lisp +++ b/AoC2022/04/solver.lisp @@ -4,23 +4,26 @@ "Test if [b0;b1] within [a0;a1]" (and (<= a0 b0 ) (>= a1 b1))) -(defun sections-contained (line) - (destructuring-bind (a0 a1 b0 b1) - (mapcar #'parse-integer - (uiop:split-string line :separator '(#\, #\-))) - (or (subinterval a0 a1 b0 b1) - (subinterval b0 b1 a0 a1)))) +(defun subcontained (a0 a1 b0 b1) + (or (subinterval a0 a1 b0 b1) + (subinterval b0 b1 a0 a1))) -(defun count-repeated () +(defun overlap (a0 a1 b0 b1) + "Test if [b0;b1] overlaps [a0;a1]" + (and (<= a0 b1) (<= b0 a1))) + +(defun sections-fulfills (function line) + (apply function (mapcar #'parse-integer + (uiop:split-string line :separator '(#\, #\-))))) + +(defun count-according (function) (with-open-file (in "input") (loop for l = (read-line in nil nil) while l - count (sections-contained l)))) - + count (sections-fulfills function l)))) (fiveam:test results - (fiveam:is (= 515 (count-repeated))) - (fiveam:is (= 2567 (badge)))) - + (fiveam:is (= 515 (count-according #'subcontained))) + (fiveam:is (= 883 (count-according #'overlap)))) (fiveam:run-all-tests) |