Day 4 - common lisp
This commit is contained in:
parent
5204d36f6b
commit
cb728f5961
@ -8,7 +8,8 @@
|
|||||||
- [Day 1](./day-1)
|
- [Day 1](./day-1)
|
||||||
- [x] Clojure
|
- [x] Clojure
|
||||||
- [Day 2](./day-2)
|
- [Day 2](./day-2)
|
||||||
- [] Common LISP
|
- [x] Common LISP
|
||||||
|
- [Day 3](./day-3)
|
||||||
- [] C++
|
- [] C++
|
||||||
- [] Dart
|
- [] Dart
|
||||||
- [] Elixir
|
- [] 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