40 lines
792 B
Elixir
40 lines
792 B
Elixir
defmodule Day02 do
|
|
defp parse(data) do
|
|
data
|
|
|> String.split("\n", trim: true)
|
|
|> Enum.map(&String.trim/1)
|
|
end
|
|
|
|
def countn(data, n) do
|
|
data
|
|
|> Enum.filter(fn s -> MapSet.size(MapSet.new(String.to_charlist(s))) != String.length(s) - n + 1 end)
|
|
|> Enum.count
|
|
end
|
|
|
|
def solve(data) do
|
|
parsed = data
|
|
|> parse
|
|
f2 = parsed
|
|
|> countn(2)
|
|
f3 = parsed
|
|
|> countn(3)
|
|
f2 * f3
|
|
end
|
|
|
|
def solve_again(data) do
|
|
data
|
|
|> parse
|
|
end
|
|
|
|
def show do
|
|
data = File.read!("data/02.in")
|
|
:timer.tc(fn -> solve(data) end)
|
|
|> elem(0)
|
|
|> Kernel./(1_000_000)
|
|
|> IO.inspect
|
|
:timer.tc(fn -> solve_again(data) end)
|
|
|> elem(0)
|
|
|> Kernel./(1_000_000)
|
|
|> IO.inspect
|
|
end
|
|
end
|