src/2016/days/day-04.lisp @ 9ceb59a426ad
Remove unused macro
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Sat, 07 Dec 2019 16:58:49 -0500 |
| parents | bf4373f04499 |
| children | 182bdd87fd9e |
(defpackage :advent/2016/04 #.cl-user::*advent-use*) (in-package :advent/2016/04) (defun sort-predicate (a b) (destructuring-bind (ach . an) a (destructuring-bind (bch . bn) b (cond ((> an bn) t) ((< an bn) nil) (t (char< ach bch)))))) (defun checksum (name) (-<> name (remove #\- <>) frequencies alexandria:hash-table-alist (sort <> #'sort-predicate) (take 5 <>) (map 'string #'car <>))) (defun rot (char n) (-<> char char-code (- <> (char-code #\a)) (+ <> n) (mod <> 26) (+ <> (char-code #\a)) code-char)) (defun decrypt-char (char id) (if (char= char #\-) #\space (rot char id))) (defun decrypt (string id) (map 'string (lambda (c) (decrypt-char c id)) string)) (define-problem (2016 4) (data alexandria:read-stream-content-into-string) (158835 993) (iterate (for (name (#'parse-integer id) checksum) :matching "([\\w-]+)-(\\d+)\\[(\\w+)\\]" :against data) (when (string= checksum (checksum name)) (summing id :into part1)) (finding-first id :such-that (string= (decrypt name id) "northpole object storage") :into part2) (returning part1 part2))) #; Scratch --------------------------------------------------------------------