Untitled

 avatar
unknown
python
3 years ago
1.4 kB
5
Indexable
data    = [x for x in open('input.txt').read().split('\n\n') if x]

stacks  = [[z.strip('[]') for z in y] for y in [x.split(' ') for x in data[0].split('\n')]]
moves   = [x for x in data[1].split('\n') if x]

stacks.pop() # pop last, not needed

for stack in stacks:
    while True:
        try:
            stack[stack.index(''):stack.index('') + 4] = '-'
        except ValueError:
            break

#stacks = [[y for y in x if y] for x in list(zip(*[[z.strip('-') for z in y] for y in [x for x in stacks]][::-1]))]
part1 = [[y for y in x if y] for x in list(zip(*[[z.strip('-') for z in y] for y in [x for x in stacks]][::-1]))]
part2 = [[y for y in x if y] for x in list(zip(*[[z.strip('-') for z in y] for y in [x for x in stacks]][::-1]))]

for move in moves:
    no  = int(move.split(' ')[1])       # Number of crates to move
    src = int(move.split(' ')[3]) - 1   # Source stack
    dst = int(move.split(' ')[5]) - 1   # Destination stack

    # Part 1
    for i in range(no):
        part1[dst].append(part1[src].pop())

    # Part 2
    part2[dst] = part2[dst] + part2[src][-no:]
    part2[src] = part2[src][:-no]

part1_solution = ''.join([item for sublist in part1 for item in sublist[-1:]])
part2_solution = ''.join([item for sublist in part2 for item in sublist[-1:]])

print(f'-> Part 1: {part1_solution} -- Part 2: {part2_solution}')
Editor is loading...