Advent-of-Code/day6.lisp

74 lines
2.3 KiB
Common Lisp

(defparameter *test-input-1* "mjqjpqmgbljsphdztnvjfqwrcgsmlb")
(defparameter *test-input-2* "bvwbjplbgvbhsrlpgdmjqwftvncz")
(defparameter *test-input-3* "nppdvjthqldpwncqszvftbrmjlhg")
(defparameter *test-input-4* "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg")
(defparameter *test-input-5* "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw")
(defun all-char-different-p (str)
)
;; (set-difference (list 1 2 3 1 1) (list 3))
(ql:quickload "fset")
(defparameter *test-set* (fset:empty-set))
(fset:with *test-set* 4)
(fset:set 'a 'ab 'c)
(fset:set '(a b c ))
(apply #'fset:set '(a b c))
(eval (macroexpand `(fset:set ,@'(1 2 3))))
(fset:size (coerce "hello" 'list))
(subseq (coerce *test-input-1* 'list) 0 4)
(let
((str *test-input-5*))
(do*
((line (coerce str 'list) (cdr line))
(checked-suf (subseq line 0 4) (subseq line 0 4))
(suf-set (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))) (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))))
(ind 4 (1+ ind)))
((= 4 (fset:size suf-set)) ind)
(format t "another step with ~A~%" checked-suf)))
(subseq '(a b c d s e t d) 0 5)
(defun get-index-after-first-quad-unique (str)
(do*
((line (coerce str 'list)
(cdr line))
(checked-suf (subseq line 0 4)
(subseq line 0 4))
(suf-set (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list))))
(eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))))
(ind 4 (1+ ind)))
((= 4 (fset:size suf-set))
ind)))
(with-open-file (in "day6-input.txt")
(let ((line (read-line in)))
(get-index-after-first-quad-unique line)))
(defun get-index-after-first-14-unique (str)
(do*
((line (coerce str 'list)
(cdr line))
(checked-suf (subseq line 0 14)
(subseq line 0 14))
(suf-set (eval (macroexpand `(fset:set ,@(coerce checked-suf 'list))))
(eval (macroexpand `(fset:set ,@(coerce checked-suf 'list)))))
(ind 14 (1+ ind)))
((= 14 (fset:size suf-set))
ind)))
(get-index-after-first-14-unique *test-input-1*)
(get-index-after-first-14-unique *test-input-2*)
(get-index-after-first-14-unique *test-input-3*)
(get-index-after-first-14-unique *test-input-4*)
(get-index-after-first-14-unique *test-input-5*)
(with-open-file (in "day6-input.txt")
(let ((line (read-line in)))
(get-index-after-first-14-unique line)))