advent24-llm / day22 /solution_claude-3-5-sonnet-20241022.py
jerpint's picture
Add solution files
a4da721
def mix_and_prune(secret, value):
secret = secret ^ value # XOR mixing
return secret % 16777216 # pruning
def next_secret(secret):
# Step 1: multiply by 64
result = mix_and_prune(secret, secret * 64)
# Step 2: divide by 32
result = mix_and_prune(result, result // 32)
# Step 3: multiply by 2048
result = mix_and_prune(result, result * 2048)
return result
def generate_sequence(initial, count):
sequence = [initial]
current = initial
for _ in range(count):
current = next_secret(current)
sequence.append(current)
return sequence
def get_price_changes(sequence):
prices = [x % 10 for x in sequence] # Get last digit
changes = []
for i in range(1, len(prices)):
changes.append(prices[i] - prices[i-1])
return changes, prices
def find_sequence_value(initial, target_changes):
sequence = generate_sequence(initial, 2000)
changes, prices = get_price_changes(sequence)
# Look for the target sequence
for i in range(len(changes) - 3):
if changes[i:i+4] == target_changes:
return prices[i+4] # Return price at the end of sequence
return 0
# Read input
with open("input.txt") as f:
initial_numbers = [int(x.strip()) for x in f.readlines()]
# Part 1
result1 = sum(generate_sequence(n, 2000)[-1] for n in initial_numbers)
print(str(result1))
# Part 2
# Generate all possible sequences of 4 changes (-9 to 9 each)
best_sequence = None
max_bananas = 0
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]
total = sum(find_sequence_value(n, sequence) for n in initial_numbers)
if total > max_bananas:
max_bananas = total
best_sequence = sequence
print(str(max_bananas))