import pytest
from aoc.days.day21 import (
DayRunner,
encode_shortest_dirpad,
encode_shortest_numpad,
)
from . import get_data
def test_encode_shortest_numpad() -> None:
assert encode_shortest_numpad("029A") in (
"^^AvvvA",
"^AvvvA",
"AvvvA",
)
def test_encode_shortest_dirpad() -> None:
numpad_encoded = encode_shortest_numpad("029A")
assert len(encode_shortest_dirpad(numpad_encoded)) == len(
"v<>^AAvA<^AA>A^A"
)
@pytest.mark.parametrize(
"code,answer",
[
(
"029A",
">^AvAA<^A>A>^AvA^A^A^A>AAvA^AA>^AAAvA<^A>A",
),
("980A", ">^AAAvA^A>^AvAA<^A>AA>^AAAvA<^A>A^AA"),
(
"179A",
">^A>^AAvAA<^A>A>^AAvA^A^AAAA>^AAAvA<^A>A",
),
("456A", ">^AA>^AAvAA<^A>A^AA^AAA>^AAvA<^A>A"),
("379A", ">^AvA^A>^AAvA<^A>AAvA^A^AAAA>^AAAvA<^A>A"),
],
)
def test_encode_shortest_dirpad_twice(code: str, answer: str) -> None:
numpad_encoded = encode_shortest_numpad(code)
robot1 = encode_shortest_dirpad(numpad_encoded)
robot2 = encode_shortest_dirpad(robot1)
assert len(robot2) == len(answer)
def test_sample_part1() -> None:
assert DayRunner.part1(get_data(21)) == 126384
def test_sample_part2() -> None:
assert DayRunner.part2(get_data(21), robots=2) == 126384