Elixir Dominator
defmodule Dominator do
def dominator(a) do
{size, value, index} =
a
|> Enum.with_index()
|> Enum.reduce({0, nil, nil}, fn {v, k}, {size, value, index} ->
cond do
size == 0 -> {1, v, k}
value != v -> {size - 1, value, index}
true -> {size + 1, value, index}
end
end)
candidate = if size > 0, do: value, else: -1
count = Enum.count(a, &(&1 == candidate))
if count > div(length(a), 2), do: index, else: -1
end
end
This finds a value that appears in more than half of the array, then returns one valid index for it.