(ql:quickload '(:fiveam :uiop)) (defun subinterval (a0 a1 b0 b1) "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 count-repeated () (with-open-file (in "input") (loop for l = (read-line in nil nil) while l count (sections-contained l)))) (fiveam:test results (fiveam:is (= 515 (count-repeated))) (fiveam:is (= 2567 (badge)))) (fiveam:run-all-tests)