Skip to content

Instantly share code, notes, and snippets.

@nickponline
Last active December 23, 2024 16:14
Show Gist options
  • Select an option

  • Save nickponline/3e43831160f34689ecd02fc73e3616b0 to your computer and use it in GitHub Desktop.

Select an option

Save nickponline/3e43831160f34689ecd02fc73e3616b0 to your computer and use it in GitHub Desktop.
# https://adventofcode.com/2024/day/22
def step(secret):
secret ^= (secret << 0x6) & 0xFFFFFF
secret ^= (secret >> 0x5) & 0xFFFFFF
secret ^= (secret << 0xB) & 0xFFFFFF
return secret
def steps(secret, k=2000):
for _ in range(k):
secret = step(secret)
return secret
def generate(secret, k=2000, modulus=10):
sequence = [ secret % modulus]
for _ in range(k):
secret = step(secret)
sequence.append(secret % modulus)
return sequence
def solve_part1(numbers):
return (sum([steps(n) for n in numbers ]))
def solve_part2(numbers, seq_len=4):
total_bananas = {}
for nums in [ generate(number) for number in numbers ]:
seen = set()
for i in range(len(nums) - seq_len):
subseq = tuple([ nums[i+1+k] - nums[i+k] for k in range(seq_len) ])
if subseq not in seen:
seen.add(subseq)
total_bananas[subseq] = total_bananas.get(subseq, 0) + nums[i+seq_len]
return sorted([ (v, k) for k, v in total_bananas.items() ])[-1][0]
numbers = [int(line.strip()) for line in open('2024-22.in').readlines()]
print( solve_part1(numbers) )
print( solve_part2(numbers) )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment