day 1 part 2
This commit is contained in:
parent
2e19753b65
commit
0bdf99a8e1
1 changed files with 48 additions and 0 deletions
48
02b.lisp
Normal file
48
02b.lisp
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
(require :uiop)
|
||||||
|
(load (sb-ext:posix-getenv "ASDF"))
|
||||||
|
(asdf:load-system 'str)
|
||||||
|
|
||||||
|
(defun get-range (range)
|
||||||
|
(let ((range (str:split "-" range)))
|
||||||
|
(loop for i from (parse-integer (car range)) to (parse-integer (car (cdr range))) collect i)))
|
||||||
|
(get-range "11-22")
|
||||||
|
|
||||||
|
(defun get-ranges (instr)
|
||||||
|
(loop for range in
|
||||||
|
(str:split "," (string-trim '(#\Newline) instr))
|
||||||
|
collect
|
||||||
|
(get-range range)))
|
||||||
|
(get-ranges "1-3,4-5")
|
||||||
|
|
||||||
|
(defun match-sequence (seq-len seq remaining)
|
||||||
|
(setq rem-len (length remaining))
|
||||||
|
(cond
|
||||||
|
((not (integerp (/ rem-len seq-len))) nil)
|
||||||
|
((string= seq remaining) t)
|
||||||
|
((not (string= seq (subseq remaining 0 seq-len))) nil)
|
||||||
|
(t (match-sequence seq-len seq (subseq remaining seq-len)))))
|
||||||
|
(match-sequence 2 "12" "2212")
|
||||||
|
(match-sequence 2 "12" "121")
|
||||||
|
(match-sequence 2 "12" "1212")
|
||||||
|
(match-sequence 2 "12" "12")
|
||||||
|
|
||||||
|
(defun validate-product-id (product-id)
|
||||||
|
(setq product-id (format nil "~A" product-id))
|
||||||
|
(not
|
||||||
|
(loop for seq-len from 1 to (floor (/ (length product-id) 2))
|
||||||
|
when (match-sequence seq-len (subseq product-id 0 seq-len) (subseq product-id seq-len))
|
||||||
|
do (+ 1 2); not sure how to remove this?
|
||||||
|
and return t)))
|
||||||
|
(validate-product-id 1212)
|
||||||
|
(validate-product-id 121212)
|
||||||
|
(validate-product-id 123)
|
||||||
|
(validate-product-id 1234)
|
||||||
|
|
||||||
|
(defun sum-all-invalid-ids (text)
|
||||||
|
(reduce #'+
|
||||||
|
(remove-if #'validate-product-id
|
||||||
|
(reduce #'append
|
||||||
|
(get-ranges text)))))
|
||||||
|
|
||||||
|
(sum-all-invalid-ids (uiop:read-file-string "02example.txt"))
|
||||||
|
(sum-all-invalid-ids (uiop:read-file-string "02data.txt"))
|
||||||
Loading…
Add table
Add a link
Reference in a new issue