Advertisement
Guest User

Untitled

a guest
Dec 9th, 2024
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.93 KB | None | 0 0
  1. part1.py=========================================================
  2.  
  3.  
  4. with open('data.txt', 'r') as f:
  5.     input = f.read()
  6.  
  7. data = list(input)
  8.  
  9. fs = []
  10. free_space = False
  11. id = 0
  12. for i in data:
  13.     if free_space:
  14.         for _ in range(int(i)):
  15.             fs.append(None)
  16.         free_space = False
  17.     else:
  18.         for _ in range(int(i)):
  19.              fs.append(id)
  20.         id += 1
  21.         free_space = True
  22.  
  23. #move blocks
  24. for i in range(len(fs)-1, -1, -1):
  25.     if fs[i] is None:
  26.         continue
  27.     block_id = fs[i]
  28.     fs[i] = None
  29.     # find free space
  30.     for j in range(0, len(fs)):
  31.         if fs[j] is None:
  32.             fs[j] = block_id
  33.             break
  34.  
  35. # Calculate Checksum
  36. i = 0
  37. checksum = 0
  38. while fs[i] is not None:
  39.     checksum += i * fs[i]
  40.     i += 1
  41.  
  42. print(checksum)
  43.  
  44.  
  45.  
  46. part2.py=========================================================
  47.  
  48.  
  49. with open('data.txt', 'r') as f:
  50.     input = f.read()
  51.  
  52. data = list(input)
  53.  
  54. file_system = []
  55. free_space = False
  56. id = 0
  57.  
  58. for i in data:
  59.     if free_space:
  60.         length = int(i)
  61.         file_system.append((-1, int(length)))
  62.         free_space = False
  63.         pass
  64.     else:
  65.         length = int(i)
  66.         file_system.append((id, int(length)))
  67.         id += 1
  68.         free_space = True
  69.  
  70.  
  71. # Move blocks around
  72. index = len(file_system) - 1
  73. while index > 0:
  74.     if file_system[index][0] == -1: # this is free space, do not move
  75.         index -= 1
  76.         continue
  77.  
  78.     block_length = file_system[index][1]
  79.     # find free space to hold this block
  80.     for j in range(0, index):
  81.         if file_system[j][0] == -1: # found free space
  82.             free_length = file_system[j][1]
  83.             free_block_found = False
  84.             if free_length == block_length: # then replace the free space with the block
  85.                 free_block_found = True
  86.                 file_system[j] = file_system[index]
  87.             if free_length > block_length: # insert the block and reduce free space
  88.                 free_block_found = True
  89.                 file_system.insert(j, file_system[index])
  90.                 index += 1 # because we added an element
  91.                 file_system[j + 1] = (-1, free_length - block_length)
  92.  
  93.             if free_block_found: # then we make the old block free and exit loop
  94.                 file_system[index] = (-1, block_length)
  95.                 break
  96.  
  97.     # consolidate blocks of free space
  98.     i = 0
  99.     while i < len(file_system) - 1:
  100.         if file_system[i][0] == -1: # free space found
  101.             if file_system[i + 1][0] == -1: # then the next block is also free and should be combined
  102.                 file_system[i] = (-1, file_system[i + 1][1] + file_system[i][1])
  103.                 del file_system[i + 1]
  104.         i += 1
  105.     index -= 1
  106.  
  107. checksum = 0
  108. i = 0
  109. for f in file_system:
  110.     if f[0] == -1:
  111.         i += f[1]
  112.         continue
  113.     for _ in range(f[1]):
  114.         checksum += i * f[0]
  115.         i += 1
  116.  
  117. print(checksum)
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement