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