Advertisement
alexandrajay2002

Advent of Code 2024 day 22 part 1

Dec 22nd, 2024 (edited)
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.92 KB | Source Code | 0 0
  1. from argparse import ArgumentParser, FileType
  2.  
  3.  
  4. def parse(src):
  5.     return [int(line) for line in src.splitlines() if line != '']
  6.  
  7.  
  8. def mix_prune(secret, other):
  9.     return (secret ^ other) & 0xFFFFFF
  10.  
  11.  
  12. def step(secret):
  13.     secret = mix_prune(secret, secret << 6)
  14.     secret = mix_prune(secret, secret >> 5)
  15.     return mix_prune(secret, secret << 11)
  16.  
  17.  
  18. def main(numbers, verbose):
  19.     total = 0
  20.     for original_number in numbers:
  21.         number = original_number
  22.         for _ in range(2000):
  23.             number = step(number)
  24.  
  25.         if verbose:
  26.             print(f'{original_number}: {number}')
  27.         total += number
  28.  
  29.     return total
  30.  
  31.  
  32. arg_parser = ArgumentParser()
  33. arg_parser.add_argument('src', type=FileType('r'))
  34. arg_parser.add_argument('-v', '--verbose', action='store_true')
  35.  
  36. if __name__ == '__main__':
  37.     args = arg_parser.parse_args()
  38.     print(main(parse(args.src.read()), args.verbose))
  39.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement