Do part 2 and cleanup day06
This commit is contained in:
parent
f451ac9b1e
commit
10eebfbf75
|
@ -1,20 +1,26 @@
|
||||||
(defun string-to-list (s)
|
|
||||||
(assert (stringp s) (s) "~s :questa non e una stringa")
|
|
||||||
(coerce s 'list))
|
|
||||||
|
|
||||||
|
; Split to list, remove duplicates, recombine
|
||||||
(defun unique-string (str)
|
(defun unique-string (str)
|
||||||
(concatenate 'string (remove-duplicates (string-to-list str))))
|
(concatenate 'string (remove-duplicates (coerce str 'list))))
|
||||||
|
|
||||||
(defun unique-sequence (str n)
|
; Returns the index of the first occurrence of a sequence of "len" different characters in "str"
|
||||||
(if (= (length (unique-string (subseq str 0 n))) n)
|
(defun unique-sequence (str len &optional (offset 0))
|
||||||
(subseq str 0 n)
|
(if (= len
|
||||||
(unique-sequence (subseq str 1) n)))
|
(length (unique-string (subseq str offset (+ len offset)))))
|
||||||
|
offset
|
||||||
|
(unique-sequence str len (+ offset 1))))
|
||||||
|
|
||||||
|
; unique-sequence gives the index-of, but we want the index-after
|
||||||
(defun part1 (str)
|
(defun part1 (str)
|
||||||
(+ 4 (search (unique-sequence str 4) str)))
|
(+ 4 (unique-sequence str 4)))
|
||||||
|
|
||||||
|
(defun part2 (str)
|
||||||
|
(+ 14 (unique-sequence str 14)))
|
||||||
|
|
||||||
(let ((in (open "input.txt" :if-does-not-exist nil)))
|
(let ((in (open "input.txt" :if-does-not-exist nil)))
|
||||||
(when in
|
(when in
|
||||||
(print (part1 (read-line in)))
|
(let ((str (read-line in nil nil)))
|
||||||
|
(format t "Part 1: ~a~%" (part1 str))
|
||||||
|
(format t "Part 2: ~a~%" (part2 str)))
|
||||||
(close in)))
|
(close in)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue