diff --git a/day5/day5.py b/day5/day5.py new file mode 100644 index 0000000000000000000000000000000000000000..4d06735cc6db47e3c66325a28f67bccaa68ece75 --- /dev/null +++ b/day5/day5.py @@ -0,0 +1,42 @@ +# Day 5 - Part 1 + 2 +def print_top_crates(task): + stacks_str, procedure = open("input.dat").read().split('\n\n') + # get max number of stacks + stack_number = int(stacks_str[stacks_str.rfind(' '):]) + # remove stack numbers (indirectly saved via column index) + stacks_str = stacks_str[:stacks_str.rfind('\n')] + # initialize number of stacks with empty lists in a list + stacks = [] + for i in range(stack_number): + stacks.append([]) + # remove unnecessary characters + replace spaces with "," and \n with ";" + data = list(x.split(';') for x in stacks_str.replace(' ', ';').replace(' ', ';').split('\n')) + # add items to right stacks + for row in data: + for stack, item in enumerate(row): + if item: + stacks[stack].append(item) + + # convert procedure string to list(list(int), list(int), ...) + procedure = procedure.replace("move ", "").replace(" from ", ",").replace(" to ", ",").replace("\n", ";") + procedure_list = list(x.split(",") for x in procedure.split(";")) + procedure_int_list = [] + for row in procedure_list: + procedure_int_list.append([int(i) for i in row]) + + # execute stack procedure + if task == "part1": + for items, src, dst in procedure_int_list: + for i in range(items): + stacks[dst-1].insert(0, stacks[src-1].pop(0)) + elif task == "part2": + for items, src, dst in procedure_int_list: + for i in reversed(range(items)): + stacks[dst - 1].insert(0, stacks[src - 1].pop(i)) + + # print top items of each stack + print("".join(x[0][1] for x in stacks)) + + +if __name__ == '__main__': + print_top_crates("part1") diff --git a/day5/input.dat b/day5/input.dat new file mode 100644 index 0000000000000000000000000000000000000000..c802d106e1f6bac8290661873339566b18c3725e --- /dev/null +++ b/day5/input.dat @@ -0,0 +1,512 @@ + [M] [S] [S] + [M] [N] [L] [T] [Q] +[G] [P] [C] [F] [G] [T] +[B] [J] [D] [P] [V] [F] [F] +[D] [D] [G] [C] [Z] [H] [B] [G] +[C] [G] [Q] [L] [N] [D] [M] [D] [Q] +[P] [V] [S] [S] [B] [B] [Z] [M] [C] +[R] [H] [N] [P] [J] [Q] [B] [C] [F] + 1 2 3 4 5 6 7 8 9 + +move 1 from 7 to 4 +move 3 from 4 to 7 +move 4 from 3 to 4 +move 5 from 6 to 9 +move 1 from 8 to 1 +move 2 from 3 to 2 +move 3 from 4 to 6 +move 1 from 3 to 6 +move 9 from 7 to 1 +move 1 from 2 to 4 +move 3 from 4 to 9 +move 4 from 9 to 8 +move 6 from 8 to 2 +move 1 from 8 to 6 +move 1 from 4 to 1 +move 11 from 1 to 7 +move 1 from 4 to 7 +move 7 from 2 to 5 +move 5 from 6 to 3 +move 2 from 4 to 3 +move 2 from 5 to 9 +move 1 from 8 to 6 +move 3 from 1 to 5 +move 2 from 6 to 9 +move 1 from 4 to 8 +move 2 from 2 to 1 +move 7 from 5 to 9 +move 6 from 3 to 6 +move 1 from 2 to 5 +move 1 from 3 to 8 +move 12 from 7 to 3 +move 1 from 1 to 8 +move 2 from 1 to 9 +move 20 from 9 to 5 +move 1 from 1 to 7 +move 5 from 5 to 3 +move 1 from 8 to 7 +move 2 from 8 to 3 +move 2 from 6 to 5 +move 1 from 6 to 4 +move 18 from 3 to 2 +move 1 from 4 to 2 +move 1 from 7 to 9 +move 1 from 1 to 9 +move 1 from 6 to 1 +move 8 from 5 to 2 +move 1 from 1 to 6 +move 19 from 5 to 2 +move 5 from 2 to 6 +move 2 from 9 to 7 +move 20 from 2 to 1 +move 1 from 9 to 4 +move 8 from 6 to 2 +move 5 from 1 to 3 +move 27 from 2 to 1 +move 34 from 1 to 7 +move 1 from 2 to 6 +move 2 from 3 to 1 +move 1 from 4 to 9 +move 1 from 2 to 6 +move 2 from 1 to 7 +move 1 from 6 to 7 +move 1 from 9 to 3 +move 2 from 6 to 3 +move 1 from 6 to 4 +move 5 from 3 to 4 +move 5 from 4 to 2 +move 4 from 1 to 4 +move 4 from 1 to 4 +move 2 from 3 to 6 +move 1 from 6 to 9 +move 25 from 7 to 5 +move 1 from 6 to 4 +move 17 from 5 to 2 +move 14 from 7 to 6 +move 1 from 7 to 3 +move 1 from 9 to 3 +move 10 from 2 to 3 +move 2 from 2 to 9 +move 12 from 3 to 5 +move 18 from 5 to 8 +move 1 from 4 to 2 +move 5 from 2 to 1 +move 1 from 5 to 3 +move 3 from 2 to 1 +move 1 from 2 to 7 +move 2 from 2 to 6 +move 9 from 6 to 7 +move 16 from 8 to 2 +move 6 from 7 to 3 +move 2 from 8 to 9 +move 1 from 1 to 8 +move 16 from 2 to 6 +move 1 from 8 to 3 +move 2 from 1 to 2 +move 1 from 9 to 3 +move 7 from 4 to 1 +move 7 from 3 to 7 +move 9 from 7 to 8 +move 1 from 5 to 6 +move 2 from 9 to 7 +move 1 from 9 to 5 +move 11 from 6 to 8 +move 1 from 3 to 1 +move 1 from 4 to 2 +move 2 from 8 to 5 +move 3 from 5 to 8 +move 2 from 1 to 9 +move 5 from 1 to 4 +move 3 from 4 to 1 +move 1 from 3 to 2 +move 3 from 2 to 1 +move 1 from 9 to 1 +move 1 from 2 to 5 +move 2 from 4 to 7 +move 20 from 8 to 5 +move 1 from 9 to 7 +move 11 from 6 to 1 +move 17 from 1 to 5 +move 1 from 8 to 2 +move 7 from 5 to 8 +move 1 from 4 to 5 +move 2 from 1 to 2 +move 2 from 8 to 4 +move 4 from 7 to 6 +move 2 from 6 to 8 +move 2 from 1 to 2 +move 1 from 1 to 4 +move 4 from 8 to 9 +move 2 from 1 to 9 +move 3 from 8 to 1 +move 25 from 5 to 2 +move 23 from 2 to 1 +move 1 from 7 to 1 +move 6 from 9 to 8 +move 6 from 8 to 3 +move 3 from 6 to 2 +move 10 from 1 to 2 +move 1 from 6 to 3 +move 2 from 3 to 6 +move 2 from 3 to 2 +move 2 from 6 to 8 +move 1 from 4 to 6 +move 14 from 1 to 9 +move 2 from 3 to 4 +move 14 from 2 to 4 +move 1 from 6 to 9 +move 17 from 4 to 3 +move 1 from 8 to 6 +move 2 from 7 to 2 +move 1 from 4 to 2 +move 1 from 5 to 9 +move 9 from 2 to 4 +move 17 from 3 to 7 +move 3 from 4 to 2 +move 1 from 8 to 3 +move 4 from 5 to 7 +move 1 from 3 to 6 +move 1 from 4 to 5 +move 14 from 7 to 9 +move 2 from 1 to 9 +move 3 from 2 to 1 +move 1 from 2 to 5 +move 1 from 3 to 7 +move 4 from 1 to 2 +move 2 from 6 to 7 +move 3 from 9 to 8 +move 4 from 2 to 4 +move 17 from 9 to 7 +move 1 from 2 to 8 +move 8 from 9 to 6 +move 1 from 8 to 2 +move 19 from 7 to 9 +move 9 from 4 to 2 +move 5 from 7 to 3 +move 3 from 5 to 9 +move 6 from 2 to 5 +move 1 from 9 to 4 +move 3 from 2 to 9 +move 25 from 9 to 5 +move 1 from 3 to 6 +move 2 from 5 to 8 +move 6 from 6 to 7 +move 1 from 3 to 4 +move 2 from 3 to 4 +move 1 from 8 to 2 +move 2 from 2 to 9 +move 2 from 8 to 3 +move 5 from 7 to 6 +move 3 from 7 to 9 +move 7 from 5 to 8 +move 2 from 3 to 5 +move 1 from 3 to 5 +move 1 from 6 to 2 +move 6 from 9 to 5 +move 1 from 9 to 2 +move 1 from 6 to 9 +move 2 from 5 to 6 +move 2 from 9 to 8 +move 11 from 8 to 1 +move 2 from 5 to 9 +move 3 from 6 to 5 +move 1 from 4 to 7 +move 5 from 5 to 7 +move 1 from 4 to 8 +move 7 from 7 to 2 +move 12 from 5 to 2 +move 10 from 1 to 8 +move 1 from 9 to 6 +move 3 from 8 to 1 +move 1 from 1 to 6 +move 10 from 2 to 3 +move 8 from 8 to 7 +move 1 from 9 to 8 +move 2 from 3 to 5 +move 14 from 5 to 8 +move 1 from 3 to 2 +move 3 from 8 to 1 +move 3 from 8 to 4 +move 3 from 2 to 4 +move 5 from 6 to 4 +move 8 from 7 to 9 +move 6 from 8 to 7 +move 1 from 5 to 7 +move 6 from 2 to 9 +move 4 from 4 to 6 +move 4 from 4 to 9 +move 3 from 9 to 3 +move 1 from 8 to 6 +move 1 from 5 to 6 +move 2 from 7 to 2 +move 1 from 3 to 4 +move 3 from 4 to 1 +move 3 from 4 to 3 +move 5 from 6 to 4 +move 4 from 3 to 8 +move 1 from 6 to 4 +move 8 from 3 to 2 +move 2 from 8 to 5 +move 11 from 9 to 7 +move 9 from 1 to 9 +move 2 from 7 to 3 +move 1 from 6 to 8 +move 1 from 6 to 5 +move 5 from 9 to 8 +move 3 from 9 to 7 +move 2 from 9 to 1 +move 2 from 3 to 7 +move 12 from 7 to 1 +move 2 from 8 to 9 +move 5 from 4 to 5 +move 4 from 9 to 4 +move 1 from 1 to 3 +move 7 from 1 to 3 +move 7 from 5 to 6 +move 1 from 9 to 1 +move 1 from 5 to 1 +move 5 from 7 to 8 +move 4 from 6 to 7 +move 5 from 1 to 8 +move 1 from 4 to 3 +move 12 from 8 to 7 +move 2 from 2 to 4 +move 2 from 8 to 9 +move 3 from 8 to 2 +move 2 from 6 to 7 +move 4 from 7 to 8 +move 1 from 6 to 8 +move 4 from 3 to 2 +move 15 from 7 to 8 +move 1 from 7 to 6 +move 3 from 3 to 5 +move 2 from 3 to 4 +move 5 from 2 to 5 +move 3 from 1 to 5 +move 4 from 5 to 6 +move 4 from 5 to 9 +move 1 from 5 to 7 +move 4 from 9 to 4 +move 2 from 2 to 9 +move 2 from 5 to 2 +move 2 from 2 to 1 +move 3 from 4 to 9 +move 2 from 9 to 4 +move 2 from 8 to 5 +move 2 from 5 to 2 +move 8 from 2 to 4 +move 2 from 1 to 3 +move 2 from 3 to 5 +move 3 from 6 to 9 +move 2 from 6 to 1 +move 2 from 1 to 4 +move 1 from 2 to 4 +move 1 from 5 to 7 +move 2 from 2 to 7 +move 18 from 4 to 2 +move 1 from 5 to 9 +move 2 from 7 to 9 +move 18 from 8 to 4 +move 1 from 7 to 8 +move 22 from 4 to 8 +move 6 from 2 to 6 +move 3 from 6 to 8 +move 3 from 6 to 4 +move 3 from 4 to 7 +move 3 from 7 to 1 +move 14 from 2 to 3 +move 10 from 3 to 2 +move 27 from 8 to 1 +move 1 from 7 to 6 +move 1 from 3 to 7 +move 2 from 2 to 8 +move 2 from 9 to 8 +move 18 from 1 to 4 +move 6 from 1 to 5 +move 10 from 4 to 7 +move 1 from 3 to 7 +move 4 from 7 to 2 +move 3 from 9 to 7 +move 1 from 6 to 5 +move 1 from 2 to 7 +move 2 from 5 to 6 +move 2 from 6 to 5 +move 3 from 5 to 1 +move 6 from 1 to 3 +move 4 from 5 to 9 +move 11 from 2 to 9 +move 2 from 1 to 6 +move 3 from 4 to 6 +move 5 from 7 to 3 +move 2 from 6 to 1 +move 2 from 1 to 5 +move 1 from 8 to 2 +move 1 from 1 to 8 +move 1 from 6 to 4 +move 2 from 4 to 5 +move 4 from 5 to 9 +move 11 from 3 to 6 +move 1 from 3 to 6 +move 8 from 6 to 5 +move 1 from 3 to 5 +move 4 from 4 to 8 +move 21 from 9 to 6 +move 2 from 9 to 5 +move 1 from 9 to 3 +move 1 from 2 to 6 +move 7 from 8 to 6 +move 12 from 6 to 5 +move 1 from 8 to 2 +move 10 from 6 to 7 +move 15 from 7 to 2 +move 2 from 7 to 3 +move 13 from 6 to 8 +move 9 from 5 to 1 +move 12 from 5 to 3 +move 1 from 2 to 3 +move 1 from 9 to 7 +move 9 from 3 to 4 +move 3 from 4 to 6 +move 1 from 7 to 6 +move 6 from 4 to 1 +move 2 from 5 to 2 +move 6 from 1 to 8 +move 9 from 8 to 6 +move 7 from 3 to 2 +move 1 from 2 to 9 +move 9 from 6 to 1 +move 13 from 1 to 7 +move 4 from 8 to 5 +move 2 from 7 to 1 +move 3 from 6 to 4 +move 3 from 5 to 8 +move 3 from 2 to 6 +move 1 from 5 to 3 +move 1 from 3 to 4 +move 1 from 9 to 8 +move 3 from 8 to 7 +move 12 from 2 to 9 +move 10 from 7 to 4 +move 5 from 8 to 4 +move 1 from 8 to 5 +move 11 from 4 to 7 +move 8 from 9 to 7 +move 1 from 6 to 2 +move 8 from 2 to 6 +move 1 from 5 to 8 +move 4 from 1 to 5 +move 4 from 9 to 6 +move 3 from 1 to 3 +move 2 from 8 to 4 +move 1 from 7 to 6 +move 1 from 2 to 7 +move 2 from 3 to 7 +move 4 from 4 to 9 +move 11 from 6 to 9 +move 10 from 7 to 8 +move 1 from 3 to 4 +move 1 from 6 to 4 +move 4 from 5 to 7 +move 6 from 7 to 4 +move 1 from 8 to 7 +move 4 from 6 to 7 +move 12 from 4 to 8 +move 12 from 8 to 1 +move 1 from 8 to 2 +move 10 from 1 to 7 +move 2 from 4 to 1 +move 8 from 8 to 3 +move 4 from 1 to 6 +move 8 from 7 to 6 +move 2 from 6 to 5 +move 2 from 5 to 2 +move 13 from 9 to 3 +move 3 from 2 to 5 +move 8 from 3 to 4 +move 7 from 6 to 7 +move 1 from 9 to 2 +move 1 from 9 to 1 +move 2 from 6 to 4 +move 3 from 4 to 8 +move 1 from 1 to 7 +move 4 from 4 to 6 +move 3 from 8 to 7 +move 1 from 2 to 9 +move 1 from 5 to 2 +move 1 from 2 to 5 +move 2 from 4 to 5 +move 1 from 7 to 2 +move 13 from 3 to 4 +move 7 from 4 to 3 +move 4 from 5 to 9 +move 1 from 4 to 7 +move 5 from 6 to 3 +move 3 from 9 to 7 +move 10 from 7 to 8 +move 3 from 4 to 8 +move 1 from 5 to 4 +move 2 from 3 to 1 +move 3 from 7 to 4 +move 4 from 8 to 6 +move 2 from 9 to 3 +move 2 from 4 to 5 +move 4 from 4 to 3 +move 8 from 8 to 3 +move 3 from 6 to 8 +move 1 from 2 to 6 +move 5 from 7 to 9 +move 1 from 4 to 3 +move 3 from 7 to 5 +move 3 from 8 to 4 +move 7 from 7 to 5 +move 3 from 7 to 8 +move 1 from 9 to 8 +move 3 from 4 to 1 +move 1 from 5 to 8 +move 3 from 7 to 1 +move 6 from 8 to 3 +move 3 from 9 to 5 +move 2 from 6 to 5 +move 2 from 1 to 6 +move 16 from 3 to 8 +move 4 from 5 to 8 +move 4 from 3 to 8 +move 1 from 9 to 5 +move 1 from 6 to 5 +move 3 from 3 to 7 +move 6 from 1 to 6 +move 1 from 5 to 4 +move 3 from 5 to 2 +move 2 from 7 to 4 +move 1 from 2 to 8 +move 6 from 8 to 1 +move 2 from 4 to 5 +move 2 from 2 to 3 +move 7 from 8 to 7 +move 1 from 4 to 6 +move 3 from 6 to 4 +move 3 from 4 to 9 +move 3 from 6 to 3 +move 11 from 8 to 6 +move 12 from 5 to 4 +move 5 from 6 to 1 +move 9 from 3 to 2 +move 7 from 6 to 1 +move 7 from 7 to 8 +move 5 from 8 to 3 +move 2 from 3 to 6 +move 2 from 8 to 1 +move 1 from 7 to 2 +move 7 from 3 to 8 +move 1 from 9 to 1 +move 14 from 1 to 3 +move 9 from 2 to 8 +move 11 from 3 to 4 +move 22 from 4 to 1 +move 2 from 3 to 1 +move 16 from 8 to 4 +move 1 from 9 to 2 +move 3 from 6 to 9 +move 3 from 9 to 5 +move 1 from 2 to 6 +move 1 from 5 to 7 \ No newline at end of file