summaryrefslogtreecommitdiff
path: root/day-03/sol.lisp
blob: 7f9ba90c5dab766afdd8267652515d1948faeca7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(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)