diff --git a/labs/02/primes.exs b/labs/02/primes.exs new file mode 100644 index 0000000..8936918 --- /dev/null +++ b/labs/02/primes.exs @@ -0,0 +1,42 @@ +defmodule Primes do + defp sieve([], acc, _) do + Enum.reverse(acc) + end + + defp sieve([h | t], acc, n) do + if h * h > n do + Enum.reverse(acc) ++ [h | t] + else + sieve( + Enum.filter(t, fn x -> rem(x, h) != 0 end), + [h | acc], + n) + end + end + + def primes(n) do + l = Enum.to_list(2..n) + sieve(l, [], n) + end + + defp largest_permutation_set(p) do + p |> Enum.group_by(fn x -> x + |> Integer.to_string() + |> String.to_charlist() + |> Enum.sort() end) + |> Map.values() + |> Enum.max_by(&length/1) + end + + def run(n, d) do + p = primes(n) + p = Enum.filter(p, fn x -> + String.length(Integer.to_string(x)) >= d + end) + + IO.puts(length(p)) + IO.puts(length(largest_permutation_set(p))) + end +end + +Primes.run(1_000_000, 6);