Elixir Passing Cars
defmodule PassingCars do
  def passing_cars(a) do
    a
    |> Enum.reduce_while({0, 0}, fn i, {passing, multiply} ->
      cond do
        i == 0 ->
          {:cont, {passing, multiply + 1}}

        multiply > 0 ->
          passing = passing + multiply

          if passing > 1_000_000_000 do
            {:halt, {:found, -1}}
          else
            {:cont, {passing, multiply}}
          end

        true ->
          {:cont, {passing, multiply}}
      end
    end)
    |> case do
      {:found, -1} -> -1
      {passing, _multiply} -> passing
    end
  end
end

This counts eastbound cars as it scans, then adds them whenever a westbound car appears.