37 lines
870 B
Elixir
37 lines
870 B
Elixir
defmodule Day6 do
|
|
defp read_input do
|
|
Path.expand('input', Path.dirname(__ENV__.file))
|
|
|> File.read!()
|
|
end
|
|
|
|
def part1 do
|
|
read_input()
|
|
|> String.split("\n\n")
|
|
|> Enum.map(fn block ->
|
|
String.split(block)
|
|
|> Enum.reduce(MapSet.new(), fn line, set ->
|
|
MapSet.union(set, MapSet.new(String.codepoints(line)))
|
|
end)
|
|
end)
|
|
|> Enum.map(&MapSet.size/1)
|
|
|> Enum.sum()
|
|
end
|
|
|
|
def part2 do
|
|
alphabet = String.codepoints("abcdefghijklmnopqrstuvwxyz")
|
|
|
|
read_input()
|
|
|> String.split("\n\n")
|
|
|> Enum.map(fn block ->
|
|
String.split(block)
|
|
|> Enum.reduce(MapSet.new(alphabet), fn line, set ->
|
|
MapSet.intersection(set, MapSet.new(String.codepoints(line)))
|
|
end)
|
|
end)
|
|
|> Enum.map(&MapSet.size/1)
|
|
|> Enum.sum()
|
|
end
|
|
end
|
|
|
|
Day6.part1() |> IO.inspect()
|
|
Day6.part2() |> IO.inspect()
|