day 10, cool stuff!
This commit is contained in:
47
10/ex1.py
Normal file
47
10/ex1.py
Normal file
@@ -0,0 +1,47 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user