working on 2022 day 5
This commit is contained in:
@@ -1,6 +1,76 @@
|
||||
import os
|
||||
|
||||
with open(r'advent_of_code\2022\day_5\input.txt', 'r') as file:
|
||||
with open(r'2022\day_5\input.txt', 'r') as file:
|
||||
input = file.read()
|
||||
|
||||
print(input)
|
||||
# print(input)
|
||||
|
||||
pile_map = {
|
||||
1: 1,
|
||||
2: 5,
|
||||
3: 9,
|
||||
4: 13,
|
||||
5: 17,
|
||||
6: 21,
|
||||
7: 25,
|
||||
8: 29,
|
||||
9: 33
|
||||
}
|
||||
test_input = ''' [D]
|
||||
[N] [C]
|
||||
[Z] [M] [P]
|
||||
1 2 3
|
||||
|
||||
move 1 from 2 to 1
|
||||
move 3 from 1 to 3
|
||||
move 2 from 2 to 1
|
||||
move 1 from 1 to 2'''
|
||||
|
||||
# input = test_input
|
||||
|
||||
line_first_move = input.find('move')
|
||||
loading_area = input[:(line_first_move-2)]
|
||||
# print(loading_area)
|
||||
instructions = input[line_first_move:]
|
||||
# print(instructions)
|
||||
print(loading_area)
|
||||
# test1 = loading_area[5][0]
|
||||
# print(test1)
|
||||
|
||||
def get_top_letter(pile_number, loading_area):
|
||||
column = pile_map[pile_number]
|
||||
lines = loading_area.split('\n')
|
||||
for line in lines:
|
||||
if line[column] != ' ':
|
||||
value = line[column]
|
||||
return value
|
||||
return None
|
||||
|
||||
def add_to_pile(value, pile_number, loading_area):
|
||||
column = pile_map[pile_number]
|
||||
lines = [list(line) for line in loading_area.split('\n')]
|
||||
for line in reversed(lines):
|
||||
if line[column] == ' ':
|
||||
line[column] = value
|
||||
break
|
||||
loading_area = '\n'.join(''.join(line) for line in lines)
|
||||
return loading_area
|
||||
|
||||
test = add_to_pile('X',3, loading_area)
|
||||
print(test)
|
||||
|
||||
def move_box(from_pile, to_pile):
|
||||
# find the box on the top of the pile
|
||||
letter_to_move = get_top_letter(from_pile, loading_area)
|
||||
# move it to the top of the other pile
|
||||
add_to_pile(letter_to_move, to_pile, loading_area)
|
||||
# return the new loading area
|
||||
return loading_area
|
||||
|
||||
|
||||
for line in instructions.split('\n'):
|
||||
line = line.split(' ')
|
||||
counter = int(line[1])
|
||||
for repeat in range(counter):
|
||||
move_box(line[3], line[5])
|
||||
#print(line)
|
||||
|
||||
print(loading_area)
|
||||
Reference in New Issue
Block a user