36 lines
693 B
Elixir
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
|