adventofcode2022

My solutions for Advent of Code 2022
Log | Files | Refs

commit 7bae2f8156e869fd714d304bdd1dd0845c486cd1
parent e2d71d897654c2d0e8f13dd937bc313f3d9c6326
Author: Lukas Henkel <lh@entf.net>
Date:   Tue,  6 Dec 2022 06:59:26 +0100

Day 6 task 2

Diffstat:
Msrc/day06.lisp | 18++++++++++++------
Mt/day06.lisp | 21++++++++++++++-------
2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/src/day06.lisp b/src/day06.lisp @@ -2,14 +2,20 @@ (:use #:cl #:adventofcode2022)) (in-package #:adventofcode2022/day06) -(defun task1 (inputs) - (loop with data = (car inputs) - for i from 4 to (length data) - for marker = (subseq data (- i 4) i) - when (= 4 (length (remove-duplicates marker))) +(defun first-unique-n-characters-after (sequence n) + (loop with data = sequence + for i from n to (length data) + for marker = (subseq data (- i n) i) + when (= n (length (remove-duplicates marker))) do (return i))) +(defun task1 (inputs) + (first-unique-n-characters-after (car inputs) 4)) + +(defun task2 (inputs) + (first-unique-n-characters-after (car inputs) 14)) + (define-day 6 () #'task1 - nil) + #'task2) diff --git a/t/day06.lisp b/t/day06.lisp @@ -1,15 +1,22 @@ (in-package #:adventofcode2022/test) (defparameter *testdata-day06* - (list (list "mjqjpqmgbljsphdztnvjfqwrcgsmlb" 7) - (list "bvwbjplbgvbhsrlpgdmjqwftvncz" 5) - (list "nppdvjthqldpwncqszvftbrmjlhg" 6) - (list "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg" 10) - (list "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw" 11))) + (list (list "mjqjpqmgbljsphdztnvjfqwrcgsmlb" 7 19) + (list "bvwbjplbgvbhsrlpgdmjqwftvncz" 5 23) + (list "nppdvjthqldpwncqszvftbrmjlhg" 6 23) + (list "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg" 10 29) + (list "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw" 11 26))) (def-test day06-task1 () - (loop for (data marker) in *testdata-day06* + (loop for (data m-1 m-2) in *testdata-day06* do (is-true - (= marker + (= m-1 (run-task 6 1 (make-string-input-stream data)))))) + +(def-test day06-task2 () + (loop for (data m-1 m-2) in *testdata-day06* + do (is-true + (= m-2 + (run-task 6 2 + (make-string-input-stream data))))))