src/2020/days/day-10.lisp @ e41337e3b59b
Accessors
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 15 Dec 2021 23:10:57 -0500 |
parents |
ff7c8ed35992 |
children |
(none) |
(advent:defpackage* :advent/2020/10)
(in-package :advent/2020/10)
(defun part1 (data)
(iterate
(for a :in-vector data)
(for b :in-vector data :from 1)
(for δ = (abs (- a b)))
(counting (= δ 1) :into δ₁)
(counting (= δ 3) :into δ₃)
(returning (* δ₁ δ₃))))
(defun part2 (data)
(iterate
(with counts = (make-array (length data) :initial-element 1)) ; obvious dp
(for lo :in-vector data :from (- (length data) 2) :downto 0 :with-index i)
(setf (aref counts i)
(iterate (for hi :in-vector data :from (1+ i) :with-index j)
(while (<= (- hi lo) 3))
(summing (aref counts j))))
(returning (aref counts 0))))
(define-problem (2020 10) (data read-numbers) ()
(setf data (_ data
(cons 0 _)
(cons (+ 3 (alexandria:extremum _ #'>)) _)
(coerce _ 'vector)
(sort _ #'<)))
(values (part1 data) (part2 data)))
#; Scratch --------------------------------------------------------------------
(run (list 16 10 15 5 1 11 7 19 6 12 4))