Avent of Code - Day 05 - Supply StackssteemCreated with Sketch.

in #adventofcodelast year

Advent of Code occurs at Dec 01 to 25 where each day, you will need to solve a puzzle. It is Festival and the problem statement is mostly related to Christmas.

Day 5 - Supply Stacks

https://adventofcode.com/2022/day/5

image.png

Q1

import sys
from collections import defaultdict, deque

file1 = open(sys.argv[1], "r")

data = defaultdict(deque)
inst = []

while True:
        line = file1.readline()
        if not line:
                break
        arr = line.split()
        if len(arr) == 0:
                continue
        if arr[0] == "move":
                inst.append((int(arr[1]), int(arr[3]), int(arr[5])))
        elif "[" not in line:
                continue
        else:
                n = len(line)
                i = 0
                while i < n:
                        while i < n and line[i] == " ":
                                i += 1
                        if line[i] == '[':
                                data[i//4+1].appendleft(line[i+1])
                                i += 3
                        else:
                                i += 1
print(data)
print(inst)

for n, a, b in inst:
        for _ in range(n):
                data[b].append(data[a].pop())

minid = min(data.keys())
maxid = max(data.keys())
ans = []
for r in range(minid, maxid + 1):
        ans.append(data[r][-1])

print("".join(ans))

Q2

import sys
from collections import defaultdict, deque

file1 = open(sys.argv[1], "r")

data = defaultdict(deque)
inst = []

while True:
        line = file1.readline()
        if not line:
                break
        arr = line.split()
        if len(arr) == 0:
                continue
        if arr[0] == "move":
                inst.append((int(arr[1]), int(arr[3]), int(arr[5])))
        elif "[" not in line:
                continue
        else:
                n = len(line)
                i = 0
                while i < n:
                        while i < n and line[i] == " ":
                                i += 1
                        if line[i] == '[':
                                data[i//4+1].appendleft(line[i+1])
                                i += 3
                        else:
                                i += 1
print(data)
print(inst)

for n, a, b in inst:
        x = []
        for _ in range(n):
                x.append(data[a].pop())
        for i in x[::-1]:
                data[b].append(i)

minid = min(data.keys())
maxid = max(data.keys())
ans = []
for r in range(minid, maxid + 1):
        ans.append(data[r][-1])

print("".join(ans))

Today is about the Stacks and DefaultDict. But the hardest part is to handle the input (how to process the raw data and read in the initial stacks).


Steem to the Moon!

Coin Marketplace

STEEM 0.25
TRX 0.11
JST 0.033
BTC 63157.91
ETH 3096.77
USDT 1.00
SBD 3.91