diff options
Diffstat (limited to 'AoC2022/04/solver.el')
-rw-r--r-- | AoC2022/04/solver.el | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/AoC2022/04/solver.el b/AoC2022/04/solver.el new file mode 100644 index 0000000..854b247 --- /dev/null +++ b/AoC2022/04/solver.el @@ -0,0 +1,29 @@ +(require 'subr-x) + +(defun solver-subinterval (a0 a1 b0 b1) + "Test if [b0;b1] within [a0;a1]" + (and (<= a0 b0 ) (>= a1 b1))) + +(defun solver-subcontained (a0 a1 b0 b1) + (or (solver-subinterval a0 a1 b0 b1) + (solver-subinterval b0 b1 a0 a1))) + +(defun solver-overlap (a0 a1 b0 b1) + "Test if [b0;b1] overlaps [a0;a1]" + (and (<= a0 b1) (<= b0 a1))) + +(defun solver-sections-fulfills (func line) + (apply func (mapcar #'string-to-number + (split-string line "[,-]")))) + +(defun solver-count-according (func) + (with-temp-buffer + (insert-file-contents "input") + (cl-loop for l = (buffer-substring-no-properties (line-beginning-position) (line-end-position)) + while (not (string-blank-p l)) + count (solver-sections-fulfills func l) + do (forward-line)))) + +(ert-deftest test-problems () + (should (= 515 (solver-count-according #'solver-subcontained))) + (should (= 883 (solver-count-according #'solver-overlap)))) |