Sha256: 62ab6ec41bddf3b54dfced30de431d646e6060ad837e8ecc7d35dc34986290db

Contents?: true

Size: 968 Bytes

Versions: 69

Compression:

Stored size: 968 Bytes

Contents

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
    case {length(a), length(b)} do
      {la, lb} when la < lb ->
        if is_sublist(a, b, la, lb), do: :sublist, else: :unequal

      {la, lb} when la > lb ->
        if is_sublist(b, a, lb, la), do: :superlist, else: :unequal

      _ ->
        if a == b, do: :equal, else: :unequal
    end
  end

  defp is_sublist(_, _, len_a, len_b) when len_a > len_b, do: false
  # empty is sublist of all non-empty
  defp is_sublist([], _, _, _), do: true

  defp is_sublist(a, b = [_ | t], len_a, len_b) do
    if try_is_sublist(a, b) do
      true
    else
      is_sublist(a, t, len_a, len_b - 1)
    end
  end

  defp try_is_sublist([], _), do: true
  defp try_is_sublist([x | at], [x | bt]), do: try_is_sublist(at, bt)
  defp try_is_sublist(_, _), do: false
end

Version data entries

69 entries across 69 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.179 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.178 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.177 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.176 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.175 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.174 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.173 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.172 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.171 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.170 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.169 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.167 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.166 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.165 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.164 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.163 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.162 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.161 tracks/elixir/exercises/sublist/example.exs
trackler-2.2.1.160 tracks/elixir/exercises/sublist/example.exs