commit - bc03c52ea7e3331698d0639a1ebee50b38e88e2e
commit + 3311bc2c2ab44d0aa19ca977e2e2715ae6969f2f
blob - eee65c5dd9a1a6560f80c4e73d7c4f1d519fec7d
blob + a7c96b311575ae7317750f2b650687979b2366cc
--- src/day-20.lisp
+++ src/day-20.lisp
with pos = start
with last = nil
with steps = nil
- with task-1 = 0
- with task-2 = 0
- for picoseconds from 0
+ with task-1 fixnum = 0
+ with task-2 fixnum = 0
+ for picoseconds fixnum from 0
do (loop for (pos-2 . picoseconds-2) in steps
for distance = (manhattan-distance pos pos-2)
- for saved = (- picoseconds (+ picoseconds-2 distance))
+ for saved fixnum = (- picoseconds (+ (the fixnum picoseconds-2) distance))
do (when (>= saved 100)
(when (<= distance 2)
(incf task-1))
blob - 8d9cb790806b0b4492d45670206eaaa30475b759
blob + be66e9605bf005fc2c9f1c6a8b45b4a2062376a7
--- src/utils.lisp
+++ src/utils.lisp
(the fixnum (mod (point-y point-a)
(point-y point-divisor)))))
-(declaim (inline point-in-bounds-p point-in-map-p))
+(declaim (ftype (function (cons fixnum fixnum) boolean) point-in-bounds-p)
+ (inline point-in-bounds-p point-in-map-p))
(defun point-in-bounds-p (point width height)
(destructuring-bind (x . y) point
+ (declare (type fixnum x y))
(and (>= x 0) (>= y 0)
(< x width) (< y height))))
(mapcar (curry #'point+ point)
*map-neighbours*))
+(declaim (ftype (function (cons cons) fixnum) manhattan-distance)
+ (inline manhattan-distance))
+
(defun manhattan-distance (from to)
(+ (abs (- (point-x to)
(point-x from)))