adventofcode2022

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

commit d5b2847f1d70fbc3a24b45604483004c8efc4639
parent 48416e313124a05aa5c05addc4e8b5590aa6dbf4
Author: Lukas Henkel <lh@entf.net>
Date:   Tue, 20 Dec 2022 07:30:27 +0100

Day 20 task 2

Diffstat:
Msrc/day20.lisp | 39+++++++++++++++++++++++++++------------
Mt/day20.lisp | 6++++++
2 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/src/day20.lisp b/src/day20.lisp @@ -20,21 +20,36 @@ (replace sequence before :start1 (1+ new-index))))) do (setf (aref sequence new-index) item-to-mix))) +(defun convert-sequence (inputs &key map-number) + (coerce (loop for number in inputs + for i from 0 + collect (list (if map-number + (funcall map-number number) + number) + i)) + 'vector)) + +(defun find-coordinates (sequence) + (let ((length (length sequence)) + (zero (position-if (lambda (item) + (zerop (car item))) + sequence))) + (+ (car (aref sequence (mod (+ zero 1000) length))) + (car (aref sequence (mod (+ zero 2000) length))) + (car (aref sequence (mod (+ zero 3000) length)))))) + (defun task1 (inputs) - (let ((sequence (coerce (loop for number in inputs - for i from 0 - collect (list number i)) - 'vector)) - (length (length inputs))) + (let ((sequence (convert-sequence inputs))) (mix sequence) - (let ((zero (position-if (lambda (item) - (zerop (car item))) - sequence))) - (+ (car (aref sequence (mod (+ zero 1000) length))) - (car (aref sequence (mod (+ zero 2000) length))) - (car (aref sequence (mod (+ zero 3000) length))))))) + (find-coordinates sequence))) + +(defun task2 (inputs) + (let ((sequence (convert-sequence inputs :map-number (lambda (number) + (* number 811589153))))) + (loop repeat 10 do (mix sequence)) + (find-coordinates sequence))) (define-day 20 (:translate-input #'parse-integer) #'task1 - nil) + #'task2) diff --git a/t/day20.lisp b/t/day20.lisp @@ -14,3 +14,9 @@ (= 3 (run-task 20 1 (make-string-input-stream +testdata-day20+))))) + +(def-test day20-task2 () + (is-true + (= 1623178306 + (run-task 20 2 + (make-string-input-stream +testdata-day20+)))))