6 changed files with 1568 additions and 0 deletions
@ -0,0 +1,44 @@ |
|||
#!/usr/bin/env python3 |
|||
|
|||
import sys |
|||
|
|||
|
|||
def mix_and_prune(secret, result): |
|||
return (secret ^ result) % 16777216 |
|||
|
|||
|
|||
def prg(secret): |
|||
nsec = mix_and_prune(secret, secret * 64) |
|||
nsec = mix_and_prune(nsec, nsec // 32) |
|||
return mix_and_prune(nsec, nsec * 2048) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
nums = [int(line.strip('\n')) for line in open(sys.argv[1])] |
|||
|
|||
# challenge 1 |
|||
res1 = 0 |
|||
changes, values = {}, {} |
|||
for n in nums: |
|||
secret = n |
|||
changes[n] = [0] * 2000 |
|||
values[n] = [0] * 2000 |
|||
ob = int(str(secret)[-1]) |
|||
for i in range(2000): |
|||
secret = prg(secret) |
|||
bananas = int(str(secret)[-1]) |
|||
changes[n][i] = bananas - ob |
|||
values[n][i] = bananas |
|||
ob = bananas |
|||
res1 += secret |
|||
|
|||
print(f"challenge 1:\n{res1}\n") |
|||
# for i, c in enumerate(changes[123][3:10]): |
|||
# if c > 0: print(changes[123][i:i+4]) |
|||
print(changes[123][:10]) |
|||
|
|||
# challenge 2 |
|||
|
|||
res2 = "" |
|||
print(f"challenge 2:\n{res2}") |
|||
|
@ -0,0 +1,4 @@ |
|||
1 |
|||
10 |
|||
100 |
|||
2024 |
@ -0,0 +1 @@ |
|||
123 |
@ -0,0 +1,4 @@ |
|||
1 |
|||
2 |
|||
3 |
|||
2024 |
File diff suppressed because it is too large
Loading…
Reference in new issue