exercism/elixir/sublist/sublist.exs

36 lines
693 B
Elixir

defmodule Sublist do
@doc """
Returns whether the first list is a sublist or a superlist of the second list
and if not whether it is equal or unequal to the second list.
"""
def compare(a, b) do
cond do
a === b ->
:equal
length(a) == length(b) && a !== b ->
:unequal
is_sublist?(a, b) ->
:superlist
is_sublist?(b, a) ->
:sublist
true ->
:unequal
end
end
defp is_sublist?(_, []), do: true
defp is_sublist?([], _), do: false
defp is_sublist?(a = [head | rest], b) do
if head === hd(b) && Enum.take(a, Enum.count(b)) == b do
true
else
is_sublist?(rest, b)
end
end
end