require Integer defmodule Euler do def collatz(num) when is_integer(num), do: do_collatz([num]) defp next_collatz(num) when Integer.is_even(num), do: floor(num / 2) defp next_collatz(num), do: 3 * num + 1 defp do_collatz([last_num | _] = lst) when last_num == 1, do: lst defp do_collatz([last_num | _] = lst), do: do_collatz([next_collatz(last_num) | lst]) end IO.puts 1..1_000_000 |> Enum.max_by(&Enum.count(Euler.collatz(&1)))