Advertisement
hhoppe

Advent of code 2024 day 22 numba-jit 20 ms

Dec 22nd, 2024
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.97 KB | None | 0 0
  1. @numba.njit  # Using numba with arrays allocated outside the loop.
  2. def day22_jit(values, part2, base=19):
  3.   part1_total = 0
  4.   scores = np.full(base**4, 0)
  5.   seen = np.full(base**4, False)
  6.   secrets = np.full(2001, 0)
  7.  
  8.   for value in values:
  9.     for i in range(2001):
  10.       secrets[i] = value
  11.       value = ((value << 6) ^ value) & 0xFFFFFF
  12.       value = ((value >> 5) ^ value) & 0xFFFFFF
  13.       value = ((value << 11) ^ value) & 0xFFFFFF
  14.  
  15.     if not part2:
  16.       part1_total += secrets[-1]
  17.       continue
  18.  
  19.     seen[:] = False
  20.     a = secrets[1] % 10 - secrets[0] % 10
  21.     b = secrets[2] % 10 - secrets[1] % 10
  22.     c = secrets[3] % 10 - secrets[2] % 10
  23.     for i in range(2000 - 3):
  24.       d = secrets[i + 4] % 10 - secrets[i + 3] % 10
  25.       index = a * base**3 + b * base**2 + c * base**1 + d
  26.       if not seen[index]:
  27.         seen[index] = True
  28.         scores[index] += secrets[i + 4] % 10
  29.       a, b, c = b, c, d
  30.  
  31.   return scores.max() if part2 else part1_total
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement