Commit Diff


commit - 79070780854b628e3aec5095064ead5a73e2971b
commit + d6d76c2348e12e43bf9488048af3427a304053dd
blob - 19d0ab12276a756d06ec7d08b240b542db2083ca
blob + 633c34cadd2a0edac4d06498b8ae0998ac2d6996
--- src/day-9.lisp
+++ src/day-9.lisp
@@ -3,30 +3,20 @@
   (: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))))