Erlang Dominator
-module(dominator).
-export([dominator/1]).

dominator(A) ->
    Indexed = lists:zip(lists:seq(0, length(A) - 1), A),
    {FinalSize, FinalValue, FinalIndex} = lists:foldl(fun({K, V}, {Size, Value, Index}) ->
        case Size of
            0 -> {1, V, K};
            _ ->
                case Value =:= V of
                    true -> {Size + 1, Value, Index};
                    false -> {Size - 1, Value, Index}
                end
        end
    end, {0, undefined, 0}, Indexed),
    Candidate = case FinalSize > 0 of
        true -> FinalValue;
        false -> -1
    end,
    Count = length([X || X <- A, X =:= Candidate]),
    case Count > length(A) / 2 of
        true -> FinalIndex;
        false -> -1
    end.

This finds a value that appears in more than half of the array, then returns one valid index for it.