DoctorLai

Posted on

# Avent of Code - Day 05 - Supply Stacks

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

### Q1

``````import sys
from collections import defaultdict, deque

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

data = defaultdict(deque)
inst = []

while True:
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:
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).