Advertisement
Guest User

AoC 2024 9A

a guest
Dec 9th, 2024
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.08 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import sys
  4.  
  5. in_fn = sys.argv[1]
  6.  
  7. def print_disk(disk):
  8.     for cid in disk:
  9.         if cid < 0:
  10.             c = "."
  11.         else:
  12.             c = str(cid)
  13.         print(c, end="")
  14.     print()
  15.  
  16. comp = []
  17. disk = []
  18.  
  19. with open(in_fn, 'r') as data:
  20.     for line in data:
  21.         comp = [int(x) for x in list(line.rstrip("\n"))]
  22.  
  23. for idx, clen in enumerate(comp):
  24.     if idx % 2 == 0:
  25.         cid = idx // 2
  26.     else:
  27.         cid = -1
  28.     disk += [cid] * clen
  29.  
  30. print_disk(disk)
  31.  
  32. lidx = 0
  33. ridx = len(disk) - 1
  34. while True:
  35.     while disk[ridx] == -1:
  36.         ridx -= 1
  37.     while not disk[lidx] == -1:
  38.         lidx += 1
  39.     if not ridx > lidx:
  40.         break
  41.     disk[lidx], disk[ridx] = disk[ridx], disk[lidx]
  42.     #print_disk(disk)
  43.  
  44. print()
  45. print_disk(disk)
  46. print()
  47.  
  48. checksum = sum([idx * fid for (idx, fid) in zip(range(len(disk)), [x if x >= 0 else 0 for x in disk])])
  49. print(checksum)
  50.  
  51. checksum = 0
  52.  
  53. for idx, foo in enumerate(disk):
  54.     if foo < 0:
  55.         foo = 0
  56.     #print(idx, foo)
  57.     checksum += idx * foo
  58.  
  59. print(checksum)
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement