Lisp Passing Cars
(defun passing-cars (a)
(let ((passing-cars 0)
(multiply 0))
(dolist (i a)
(if (zerop i)
(incf multiply)
(when (> multiply 0)
(incf passing-cars multiply)
(when (> passing-cars 1000000000)
(return-from passing-cars -1)))))
passing-cars))
This counts eastbound cars as it scans, then adds them whenever a westbound car appears.