【发布时间】:2022-12-20 08:40:16
【问题描述】:
我正在尝试解决 AoC 的第 5 天。我能够解决第一部分。问题的目标如下:
规则以下面的data 变量的形式给出。
板条箱以相同的配置开始:
[D]
[N] [C]
[Z] [M] [P]
1 2 3
将单个板条箱从堆栈 2 移动到堆栈 1 的行为与以前相同:
[D]
[N] [C]
[Z] [M] [P]
1 2 3
然而,将三个板条箱从堆栈 1 移动到堆栈 3 的操作意味着这三个移动的板条箱保持相同的顺序,从而产生了这个新配置:
[D]
[N]
[C] [Z]
[M] [P]
1 2 3
接下来,当两个板条箱从第 2 层移到第 1 层时,它们也保持它们的顺序:
[D]
[N]
[C] [Z]
[M] [P]
1 2 3
最后,一个箱子仍然从堆栈 1 移动到堆栈 2,但现在移动的是箱子 C:
[D]
[N]
[Z]
[M] [C] [P]
1 2 3
在此示例中,CrateMover 9001 将板条箱置于完全不同的顺序:MCD。
在重新安排过程完成之前,更新您的模拟,以便精灵知道他们应该站在哪里以准备卸载最后的补给品。重新排列过程完成后,哪个板条箱最终出现在每个堆叠的顶部?
下面是我的代码:
data ="""move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2"""
first = ['Z', 'N']
second = ['M', 'C', 'D']
third = ['P']
stack_numbers = {1: first, 2: second, 3: third}
for i in data.splitlines():
i = i.strip()
temp = re.findall(r'\d+', i)
res = list(map(int, temp))
n = res[0]
move_from = stack_numbers[res[1]]
move_to = stack_numbers[res[2]]
for i in range(n):
a = move_from[i:]
move_to.append(a)
res[1] = move_from[:i]
res[2] = move_to
print(first, second, third)
seq = first.pop() + second.pop() + third.pop()
print(seq)
基本上,我在这里尝试使用切片。我正在尝试从给定的堆栈中切片 range(n) 中的元素,并尝试使用切片将它们附加到所需的堆栈,并将它们从 move_from 关联的堆栈中删除。但是,我无法达到预期的结果。
预期输出如问题描述中给出的那样,即MCD。我通过运行上面的 for 循环得到的实际输出如下:
['Z', 'N', ['M', 'C', 'D'], ['M', 'C', 'D'], ['C', 'D']] ['M', 'C', 'D', ['Z', 'N', ['M', 'C', 'D'], ['M', 'C', 'D'], ['C', 'D']]] ['P', ['Z', 'N', ['M', 'C', 'D']], ['N', ['M', 'C', 'D']], [['M', 'C', 'D']]]
['C', 'D', 'Z', 'N', ['M', 'C', 'D'], ['M', 'C', 'D'], ['C', 'D'], ['M', 'C', 'D']]
我到底需要在这里改变什么?另外,这样做的有效方法是什么?因为我的解决方案是一种蛮力方式。
【问题讨论】:
标签: python python-3.x