Advent 2022 - Day 6
Mix.install([
{:kino, github: "livebook-dev/kino"}
])
:ok
Setup
input = Kino.Input.textarea("Please paste your input file:")
packets =
input
|> Kino.Input.read()
|> String.graphemes()
["m", "j", "q", "j", "p", "q", "m", "g", "b", "l", "j", "s", "p", "h", "d", "z", "t", "n", "v", "j",
"f", "q", "w", "r", "c", "g", "s", "m", "l", "b"]
Utils
defmodule CommunicationDevice do
def find_first_duplicate(packets, chunk_size) do
index =
packets
|> Enum.chunk_every(chunk_size, 1, :discard)
|> Enum.map(&MapSet.new(&1))
|> Enum.with_index()
|> Enum.find(fn {set, _index} -> MapSet.size(set) == chunk_size end)
|> elem(1)
index + chunk_size
end
end
{:module, CommunicationDevice, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:find_first_duplicate, 2}}
Part 1
CommunicationDevice.find_first_duplicate(packets, 4)
7
Part 2
CommunicationDevice.find_first_duplicate(packets, 14)
19