commit - 79070780854b628e3aec5095064ead5a73e2971b
commit + d6d76c2348e12e43bf9488048af3427a304053dd
blob - 19d0ab12276a756d06ec7d08b240b542db2083ca
blob + 633c34cadd2a0edac4d06498b8ae0998ac2d6996
--- src/day-9.lisp
+++ src/day-9.lisp
(:export #:day-9))
(in-package #:aoc/day-9)
-(defun diff-sequence (numbers)
- (loop with last = (first numbers)
- for number in (rest numbers)
- collect (- number last)
- do (setf last number)))
-
(defun find-next-value (numbers)
- (let ((new-sequence (diff-sequence numbers)))
+ (let ((new-sequence (loop with last = (first numbers)
+ for number in (rest numbers)
+ collect (- number last)
+ do (setf last number))))
(if (every (curry #'= 0) new-sequence)
(first numbers)
(+ (lastcar numbers)
(find-next-value new-sequence)))))
-(defun find-previous-value (numbers)
- (let ((new-sequence (diff-sequence numbers)))
- (if (every (curry #'= 0) new-sequence)
- (first numbers)
- (- (first numbers)
- (find-previous-value new-sequence)))))
-
(defun day-9 (input)
(loop for line = (read-line input nil)
while line
for numbers = (read-number-list line)
sum (find-next-value numbers) into task-1 fixnum
- sum (find-previous-value numbers) into task-2 fixnum
+ sum (find-next-value (nreverse numbers)) into task-2 fixnum
finally (return (values task-1 task-2))))