Lisp Min Avg Two Slice
(defun min-avg-two-slice (a)
(let* ((vec (coerce a 'vector))
(count (length vec))
(idx 0)
(min (/ (+ (aref vec 0) (aref vec 1)) 2.0)))
(loop for i from 0 below (1- count)
do (let ((cur (/ (+ (aref vec i) (aref vec (1+ i))) 2.0)))
(when (< (+ i 2) count)
(let ((three (/ (+ (aref vec i) (aref vec (1+ i)) (aref vec (+ i 2))) 3.0)))
(setf cur (min cur three))))
(when (< cur min)
(setf min cur)
(setf idx i))))
idx))
This leans on the key trick for this problem: the minimum average slice is always length 2 or 3.