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.