aboutsummaryrefslogtreecommitdiffstats
path: root/AoC2022/04/solver.el
diff options
context:
space:
mode:
Diffstat (limited to 'AoC2022/04/solver.el')
-rw-r--r--AoC2022/04/solver.el29
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))))