Erlang Frog River One
-module(frog_river_one).
-export([frog_river_one/2]).
frog_river_one(X, A) ->
frog_river_one(X, A, 0, sets:new()).
frog_river_one(_X, [], _K, _Seen) ->
-1;
frog_river_one(X, [H | T], K, Seen) ->
case H =< X andalso not sets:is_element(H, Seen) of
true ->
Seen1 = sets:add_element(H, Seen),
case sets:size(Seen1) =:= X of
true -> K;
false -> frog_river_one(X, T, K + 1, Seen1)
end;
false ->
frog_river_one(X, T, K + 1, Seen)
end.
This tracks the earliest time each needed position appears and stops as soon as the frog can cross.