-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path22_1.py
37 lines (27 loc) · 955 Bytes
/
22_1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import time
MASK_24 = (1 << 24) - 1 # 24-bit mask
class PuzzleSolver:
def __init__(self, secret_input: int):
self.secret = secret_input & MASK_24
def evolve(self):
self.secret ^= ((self.secret << 6) & MASK_24)
self.secret ^= (self.secret >> 5)
self.secret &= MASK_24
self.secret ^= ((self.secret << 11) & MASK_24)
self.secret &= MASK_24
def solve(self, iterations: int) -> int:
for _ in range(iterations):
self.evolve()
return self.secret
if __name__ == "__main__":
with open("input/22_1.txt", "r") as f:
secrets = list(map(int, f.read().splitlines()))
evolutions = 2000
start_time = time.time()
total = 0
for secret in secrets:
solver = PuzzleSolver(secret)
total += solver.solve(evolutions)
elapsed = time.time() - start_time
print(f"Result is {total}")
print(f"Time taken: {elapsed:.3f} seconds")