advent24-llm / day22 /solution_gpt-4o.py
jerpint's picture
Add solution files
a4da721
def mix_and_prune(secret, value):
secret ^= value
secret %= 16777216
return secret
def generate_secret_numbers(initial_secret, count):
secret = initial_secret
for _ in range(count):
secret = mix_and_prune(secret, secret * 64)
secret = mix_and_prune(secret, secret // 32)
secret = mix_and_prune(secret, secret * 2048)
return secret
def calculate_price_changes(secret_numbers):
prices = [s % 10 for s in secret_numbers]
changes = [prices[i] - prices[i - 1] for i in range(1, len(prices))]
return changes
def find_best_sequence(buyers_initial_secrets):
max_bananas = 0
best_sequence = None
all_changes = []
for initial_secret in buyers_initial_secrets:
secret_numbers = [initial_secret]
for _ in range(2000):
secret_numbers.append(generate_secret_numbers(secret_numbers[-1], 1))
changes = calculate_price_changes(secret_numbers)
all_changes.append(changes)
# Try all possible sequences of four changes
for a in range(-9, 10):
for b in range(-9, 10):
for c in range(-9, 10):
for d in range(-9, 10):
sequence = [a, b, c, d]
bananas = 0
for changes in all_changes:
for i in range(len(changes) - 3):
if changes[i:i+4] == sequence:
bananas += (changes[i+4] + 10) % 10
break
if bananas > max_bananas:
max_bananas = bananas
best_sequence = sequence
return max_bananas
def main():
with open("input.txt", "r") as file:
buyers_initial_secrets = [int(line.strip()) for line in file.readlines()]
# Part 1
sum_of_2000th_secrets = sum(generate_secret_numbers(secret, 2000) for secret in buyers_initial_secrets)
print(sum_of_2000th_secrets)
# Part 2
max_bananas = find_best_sequence(buyers_initial_secrets)
print(max_bananas)
main()