Add solutions for 2022:6 Tuning Trouble

This commit is contained in:
Anders Englöf Ytterström 2022-12-06 08:22:26 +01:00 committed by Anders Englöf Ytterström
parent c98303d0c1
commit 67ff3997f1
2 changed files with 88 additions and 0 deletions

View file

@ -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

View file

@ -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