Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Input: list of numbers (initial secret number of each buyer)
- # Output: given a sequence of four differences (-9 to +9),
- # each number is transformed until its ones digit goes through
- # those differences, then stops
- # which sequence maximizes sum of final ones digits?
- # if sequence not found within 2000 steps, then it doesn't contribute
- from functools import cache
- import math
- @cache
- def next_number(number):
- number = (number ^ (number * 64)) % 16777216
- number = (number ^ math.floor(number / 32)) % 16777216
- number = (number ^ (number * 2048)) % 16777216
- return number
- def sequence_key(sequence):
- return str(sequence[0]) + "," + str(sequence[1]) + "," + str(sequence[2]) + "," + str(sequence[3])
- initial_numbers = []
- file = open("22_input.txt", "r")
- for line in file:
- line = line.replace("\n", "")
- initial_numbers.append(int(line))
- sequence_values = {}
- for number in initial_numbers:
- sequences = []
- differences = []
- for iteration in range(2000):
- new_number = next_number(number)
- difference = (new_number % 10) - (number % 10)
- if len(differences) == 4:
- differences = differences[1:]
- differences.append(difference)
- number = new_number
- if len(differences) == 4 and not (differences in sequences):
- sk = sequence_key(differences)
- if not (sk in sequence_values):
- sequence_values[sk] = 0
- sequence_values[sk] += (number % 10)
- sequences.append(differences)
- max_bananas = 0
- for sk in sequence_values:
- if max_bananas < sequence_values[sk]:
- max_bananas = sequence_values[sk]
- print (max_bananas)
Add Comment
Please, Sign In to add comment