From 67ff3997f15633864fbda9b3b851a6fd1be13fad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Ytterstr=C3=B6m?= Date: Tue, 6 Dec 2022 08:22:26 +0100 Subject: [PATCH] Add solutions for 2022:6 Tuning Trouble --- 2022-elixir/lib/solutions/day_06.ex | 43 +++++++++++++++++++++ 2022-elixir/test/solutions/day_06_test.exs | 45 ++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 2022-elixir/lib/solutions/day_06.ex create mode 100644 2022-elixir/test/solutions/day_06_test.exs diff --git a/2022-elixir/lib/solutions/day_06.ex b/2022-elixir/lib/solutions/day_06.ex new file mode 100644 index 0000000..6ce8710 --- /dev/null +++ b/2022-elixir/lib/solutions/day_06.ex @@ -0,0 +1,43 @@ +defmodule Aoc.Solution.Day06 do + @name "Day 6: Tuning Trouble" + @behaviour Solution + + @impl Solution + def get_name, do: @name + + @impl Solution + def present(solution), do: "Packet marker is at #{solution}" + + @impl Solution + def present_again(solution), do: "Message marker is at #{solution}" + + @impl Solution + def parse!(raw) do + raw |> String.trim() |> String.codepoints() + end + + @impl Solution + def solve(datastream) do + datastream |> packet_marker() + end + + @impl Solution + def solve_again(datastream) do + datastream |> message_marker() + end + + def packet_marker(datastream) do + distinct_sequence(datastream, 4) + end + + def message_marker(datastream) do + distinct_sequence(datastream, 14) + end + + def distinct_sequence(datastream, l, start \\ 0) do + case datastream |> Enum.slice(start, l) |> MapSet.new() |> MapSet.size() do + ^l -> start + l + _ -> distinct_sequence(datastream, l, start + 1) + end + end +end diff --git a/2022-elixir/test/solutions/day_06_test.exs b/2022-elixir/test/solutions/day_06_test.exs new file mode 100644 index 0000000..7760cec --- /dev/null +++ b/2022-elixir/test/solutions/day_06_test.exs @@ -0,0 +1,45 @@ +defmodule Day06Test do + use ExUnit.Case + doctest Aoc.Solution.Day06 + import Aoc.Solution.Day06 + + @input [ + "mjqjpqmgbljsphdztnvjfqwrcgsmlb", + "bvwbjplbgvbhsrlpgdmjqwftvncz", + "nppdvjthqldpwncqszvftbrmjlhg", + "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", + "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw" + ] + + test "06: Tuning Trouble, part 1" do + [input_a, input_b, input_c, input_d, input_e] = @input + + result_a = input_a |> parse!() |> solve() + result_b = input_b |> parse!() |> solve() + result_c = input_c |> parse!() |> solve() + result_d = input_d |> parse!() |> solve() + result_e = input_e |> parse!() |> solve() + + assert result_a == 7 + assert result_b == 5 + assert result_c == 6 + assert result_d == 10 + assert result_e == 11 + end + + test "06: Tuning Trouble, part 2" do + [input_a, input_b, input_c, input_d, input_e] = @input + + result_a = input_a |> parse!() |> solve_again() + result_b = input_b |> parse!() |> solve_again() + result_c = input_c |> parse!() |> solve_again() + result_d = input_d |> parse!() |> solve_again() + result_e = input_e |> parse!() |> solve_again() + + assert result_a == 19 + assert result_b == 23 + assert result_c == 23 + assert result_d == 29 + assert result_e == 26 + end +end