lib/markov/list_util.ex

defmodule Markov.ListUtil do
  @doc """
  Splits the list into sequential three-tuples

  ## Example
      iex> Markov.ListUtil.ttuples([1, 2, 3, 4, 5, 6])
      [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}]
  """
  @spec ttuples(list()) :: list()
  def ttuples(list) do
    first_elements = list |> Enum.reverse |> tl() |> tl() |> Enum.reverse
    second_elements = list |> tl() |> Enum.reverse |> tl() |> Enum.reverse
    third_elements = list |> tl() |> tl()
    Enum.zip([first_elements, second_elements, third_elements])
  end
end