Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import defaultdict
- P = 16777216 # Pruning modulo value
- def sim(secret, n):
- secrets = []
- for _ in range(n):
- secret = (secret ^ (secret * 64)) % P
- secret = (secret ^ (secret // 32)) % P
- secret = (secret ^ (secret * 2048)) % P
- secrets.append(secret)
- return secrets
- if __name__ == "__main__":
- with open("input.txt", "r") as f:
- data = list(map(int, f.read().splitlines()))
- sequence_selling_prices = defaultdict(int)
- s = 0
- for k in data:
- secrets = sim(k, 2000)
- s += secrets[-1]
- prices = [secret % 10 for secret in secrets]
- changes = [prices[i] - prices[i - 1] for i in range(1, len(prices))]
- seen_sequences = set()
- for i in range(len(changes) - 3):
- sequence = tuple(changes[i:i + 4])
- if sequence not in seen_sequences:
- selling_price = prices[i + 4]
- sequence_selling_prices[sequence] += selling_price
- seen_sequences.add(sequence)
- optimal_sequence = max(sequence_selling_prices, key=lambda seq: sequence_selling_prices[seq])
- print(s)
- print(sequence_selling_prices[optimal_sequence])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement