defmodule AOC.Day3 do use AOC.Day, day: 3 def parse_input(lines), do: lines def part1(input) do input |> Enum.map(fn line -> comp_size = line |> String.length() |> div(2) {comp1, comp2} = line |> String.to_charlist() |> Enum.split(comp_size) comp1 = MapSet.new(comp1) comp2 = MapSet.new(comp2) MapSet.intersection(comp1, comp2) |> MapSet.to_list() |> hd() |> get_priority() end) |> Enum.sum() end def part2(input) do input |> Enum.chunk_every(3) |> Enum.map(fn group -> group |> Enum.map(&String.to_charlist/1) |> Enum.map(&MapSet.new/1) |> Enum.reduce(&MapSet.intersection/2) |> MapSet.to_list() |> hd() |> get_priority() end) |> Enum.sum() end def get_priority(char) when char >= ?a, do: char - 96 def get_priority(char), do: char - 38 end