aoc/aoc_2022/day-03/sol.lisp

34 lines
898 B
Common Lisp
Raw Permalink Normal View History

2022-12-04 00:29:10 -05:00
(ql:quickload "cl-ppcre")
(defun get-ranges (line)
(ppcre:register-groups-bind ((#'parse-integer first second third fourth))
("(\\d+)-(\\d+),(\\d+)-(\\d+)" line :sharedp t)
`((,first ,second) (,third ,fourth))))
(defun ranges-may-subset-of-one (a b)
(member-if
(lambda (r)
(and
(>= (caar r) (caadr r))
(<= (cadar r) (cadadr r))))
`((,a ,b) (,b ,a))))
(defun range-is-contained-at-all (a b)
(and
(<= (car a) (cadr b))
(>= (cadr a) (car b))))
(defun main ()
(let ((lines (uiop:read-file-lines "input")))
(print
(mapcar (lambda (f)
(reduce (lambda (a x)
(if (apply f (get-ranges x))
(1+ a)
a))
lines
:initial-value 0))
'(range-is-contained range-may-be-subset-of-one)))))
(main)