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
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).
Top comments (0)