day04.lisp (1263B)
1 (defpackage #:adventofcode2022/day04 2 (:use #:cl #:adventofcode2022)) 3 (in-package #:adventofcode2022/day04) 4 5 (defun range-contains-p (begin-1 end-1 begin-2 end-2) 6 (or (and (>= begin-1 begin-2) (<= end-1 end-2)) 7 (and (>= begin-2 begin-1) (<= end-2 end-1)))) 8 9 (defun range-intersects-p (begin-1 end-1 begin-2 end-2) 10 (and (<= begin-1 end-2) 11 (<= begin-2 end-1))) 12 13 (defun task1 (inputs) 14 (loop for input in inputs 15 when (range-contains-p 16 (caar input) 17 (cdar input) 18 (cadr input) 19 (cddr input)) 20 sum 1)) 21 22 (defun task2 (inputs) 23 (loop for input in inputs 24 when (range-intersects-p 25 (caar input) 26 (cdar input) 27 (cadr input) 28 (cddr input)) 29 sum 1)) 30 31 (define-day 4 32 (:translate-input (lambda (line) 33 (let* ((pair (str:split "," line)) 34 (range-1 (str:split "-" (car pair))) 35 (range-2 (str:split "-" (cadr pair)))) 36 `((,(parse-integer (car range-1)) . ,(parse-integer (cadr range-1))) . 37 (,(parse-integer (car range-2)) . ,(parse-integer (cadr range-2))))))) 38 #'task1 39 #'task2)