; zeros and ones

(define (zero xs)
  (let ((max-count 0) (max-index -1) (prev2 -1) (prev1 -1) (count 0) (lo 0))
    (do ((hi 0 (+ hi 1)) (xs xs (cdr xs))) ((null? xs) max-index)
      (when (zero? (car xs)) (set! prev2 prev1) (set! prev1 hi) (set! count (+ count 1)))
      (when (= count 2) (set! lo (+ prev2 1)) (set! count 1))
      (when (< max-count (- hi lo -1)) (set! max-count (- hi lo -1)) (set! max-index prev1)))))

(display (zero '(1 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1))) (newline)
(display (zero '(0 0 1 0 1 1 1 0 1 1))) (newline)