src/2020/days/day-05.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/05)
(in-package :advent/2020/05)
(defun avg (x y)
(/ (+ x y) 2))
(defun id (row col)
(+ (* 8 row) col))
(defun decode (spec)
(iterate (with rlo = 0)
(with rhi = 128)
(with clo = 0)
(with chi = 8)
(for ch :in-string spec)
(ecase ch
(#\F (setf rhi (avg rlo rhi)))
(#\B (setf rlo (avg rlo rhi)))
(#\L (setf chi (avg clo chi)))
(#\R (setf clo (avg clo chi))))
(returning (id rlo clo))))
(defun find-missing-seat (ids)
(iterate (for id :in-vector ids)
(for pid :previous id)
(when (and pid (/= (1+ pid) id))
(return (1+ pid)))))
(define-problem (2020 5) (data read-lines) (974 646)
(let ((ids (sort (map 'vector #'decode data) #'<)))
(values
(aref ids (1- (length ids)))
(find-missing-seat ids))))
#; Scratch --------------------------------------------------------------------