#!/usr/bin/env python3 import sys def mix_and_prune(secret, result): return (secret ^ result) % 16777216 def prg(secret): nsec = mix_and_prune(secret, secret * 64) nsec = mix_and_prune(nsec, nsec // 32) return mix_and_prune(nsec, nsec * 2048) if __name__ == '__main__': nums = [int(line.strip('\n')) for line in open(sys.argv[1])] # challenge 1 res1 = 0 changes, values = {}, {} for n in nums: secret = n changes[n] = [0] * 2000 values[n] = [0] * 2000 ob = int(str(secret)[-1]) for i in range(2000): secret = prg(secret) bananas = int(str(secret)[-1]) changes[n][i] = bananas - ob values[n][i] = bananas ob = bananas res1 += secret print(f"challenge 1:\n{res1}\n") # for i, c in enumerate(changes[123][3:10]): # if c > 0: print(changes[123][i:i+4]) print(changes[123][:10]) # challenge 2 res2 = "" print(f"challenge 2:\n{res2}")