Day 4 - common lisp
This commit is contained in:
parent
5204d36f6b
commit
cb728f5961
@ -8,7 +8,8 @@
|
||||
- [Day 1](./day-1)
|
||||
- [x] Clojure
|
||||
- [Day 2](./day-2)
|
||||
- [] Common LISP
|
||||
- [x] Common LISP
|
||||
- [Day 3](./day-3)
|
||||
- [] C++
|
||||
- [] Dart
|
||||
- [] Elixir
|
||||
|
33
day-03/sol.lisp
Normal file
33
day-03/sol.lisp
Normal file
@ -0,0 +1,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)
|
Loading…
Reference in New Issue
Block a user