from collections import deque def press(state, button): new_state = list(state) for i in range(len(button)): new_state[button[i]] ^= 1 return tuple(new_state) def bfs(queue, visited, goal, buttons): while queue: state, presses = queue.popleft() if state == goal: return presses if state in visited: continue visited.add(state) for button in buttons: new_state = press(state, button) if new_state not in visited: queue.append((new_state, presses + 1)) print('No solution found') return -1 with open('input.txt', 'r') as file: lines = file.readlines() count = 0 for line in lines: line = line.rstrip('\n').split() goal_text = line[0].strip('[]') goal = [] for char in goal_text: if char == '.': goal.append(0) elif char == '#': goal.append(1) goal = tuple(goal) buttons = [] for i in range(1, len(line) - 1): buttons.append(tuple(map(int, line[i].strip('()').split(',')))) initial = tuple([0] * len(goal)) queue = deque([(initial, 0)]) visited = set() count += bfs(queue, visited, goal, buttons) print(count)