diff --git a/10/main.py b/10/main.py index 40b41e3..8ad4830 100755 --- a/10/main.py +++ b/10/main.py @@ -38,6 +38,44 @@ def traverse_tree(solution: str, choices: list[str], states: set[str]) -> int: return 1 + traverse_tree(solution, choices, new_states) +def sum_of_states(): + return + + +def press_button(button: str, state: str) -> str: + debug(f"\nSTATE: %s\nBUTTON: %s", state, button) + for light in range(len(state)): + if str(light) in button.split(","): + if state[light] == "#": + state = state[:light] + "." + state[light:][1:] + continue + state = state[:light] + "#" + state[light:][1:] + return state + + +def depth_traversal( + solution: str, choices: list[str], current: str, states: list[str] +) -> int: + debug(f"CURRENT STATE: %s", current) + debug(f"STATES_ ENCOUNTERED: %s", states) + for c in range(len(choices)): + new_state = press_button(choices[c], current) + debug(f"NEW STATE: %s", new_state) + if new_state == "." * len(solution): + return 0 + if new_state == "".join(["#" if x % 2 == 1 else "." for x in solution]) and sum_of_states(states) == solution: + return 1 + result = depth_traversal( + solution, + choices, + new_state, + states + [new_state], + ) + if result == 1: + break + return 1 + result + + def find_shortest_solutions( manual: list[list[str]], ) -> list[int]: @@ -52,11 +90,26 @@ def find_shortest_solutions( ], ) output.append(traverse_tree(line[0], line[1:-1], {"".join("." * len(line[0]))})) + for line in manual: + solution = "".join(line[len(line) - 1].split(",")) + debug( + "CURRENT SOLUTION: %s\nCURRENT CHOICES: %s", + solution, + [ + "".join(["#" if str(x) in button else "." for x in range(len(line[0]))]) + for button in line[1:-1] + ], + ) + output.append( + depth_traversal( + solution, line[1:-1], "." * len(solution), ["." * len(solution)] + ) + ) return output def main() -> None: - input_filepath = "input/manual.txt" + input_filepath = "input/test_manual.txt" input_manual = parse_input(input_filepath) debug("MANUAL\n%s", input_manual) shortest_solutions = find_shortest_solutions(input_manual)