Advertisement
illuminati229

Untitled

Dec 5th, 2022
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.62 KB | None | 0 0
  1. def day05(filepath, cratemover9001=False):
  2.     with open(filepath) as fin:
  3.         lines = fin.readlines()
  4.  
  5.     crates = []
  6.     moves = []
  7.     crate_id = ''
  8.  
  9.     for line in lines:
  10.         if line[:4] == 'move':
  11.             moves.append(line[5:])
  12.         elif line[:6] == ' 1   2':
  13.             crate_id = line
  14.         elif line.isspace():
  15.             pass
  16.         else:
  17.             crates.append(line)
  18.  
  19.     crate_array = []
  20.     for letter in crates[-1]:
  21.         if letter.isalpha():
  22.             crate_array.append([letter])
  23.  
  24.     for line in crates[-2::-1]:
  25.         for i, letter in enumerate(line):
  26.             if letter.isalpha():
  27.                 stack = int(crate_id[i])
  28.                 crate_array[stack - 1].append(letter)
  29.  
  30.     for move in moves:
  31.         number_crates = int(move.split(' from ')[0])
  32.         stack_from = int(move.split(' from ')[1].split(' to ')[0])
  33.         stack_to = int(move.split(' from ')[1].split(' to ')[1])
  34.         if not cratemover9001:
  35.             for i in range(number_crates):
  36.                 crate_array[stack_to - 1].append(crate_array[stack_from - 1].pop())
  37.         else:
  38.             crate_array[stack_to - 1].extend(crate_array[stack_from - 1][-number_crates:])
  39.             for i in range(number_crates):
  40.                 crate_array[stack_from - 1].pop()
  41.  
  42.     top_crates = ''
  43.     for stack in crate_array:
  44.         top_crates = top_crates + stack[-1]
  45.  
  46.     return top_crates
  47.  
  48.  
  49. def main():
  50.     assert day05('test05') == 'CMZ'
  51.     print(day05('input05'))
  52.  
  53.     assert day05('test05', True) == 'MCD'
  54.     print(day05('input05', True))
  55.  
  56.  
  57. if __name__ == '__main__':
  58.     main()
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement