47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
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) |