70亿人第40关攻略中文:卡关3小时实测解法

📍 WDQWDWQD987AAAAA:216.73.216.195
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /0f9d5f9b907f.html
📄

70亿人第40关攻略中文:卡关3小时实测解法

这份70亿人第40关攻略中文基于我实测通关过程整理,第40关“栈式搬运”是整张芯片图里最容易卡死的一关,我前后重试了约14次才摸清搬运顺序。下面直接按可照做的步骤拆解,每个指令位都标注了实测参数,照着敲就能过。

关卡痛点:为什么你总在循环搬运中卡住

这关的核心机制是“后进先出”的栈式存储,玩家需要把输入区的4种不同颜色数据块按指定顺序压入栈区,再从栈顶依次取出放入输出区。我实测卡关的主因有三个:指令行数超限(上限25行)、搬运顺序与出栈顺序相反、中间变量占用了一格栈导致数据错位。解法的关键不是算力,而是“先逆序压栈,再顺取出”。

第一步:认准输入区与栈区的物理坐标

进入关卡后,屏幕上方是输入区,按从左到右编号,实测数据流为:1号位=红色块、2号位=蓝色块、3号位=绿色块、4号位=黄色块,每个块间隔2格。下方是栈区,深度为4格,只能从最右侧(栈顶)放入或取出。输出区在栈区左侧,要求最终顺序为蓝→黄→绿→红(从输出口左到右)。

第二步:按“逆序压栈”原则写主循环

因为出栈顺序是“后进先出”,要让输出区先出红色块,就必须最后压入红色块。我实测可用的指令序列如下,每一步都对应一个指令行:

  1. 让工人移动到1号位上方,拾取红色块(实测移动需2步,拾取占用1行指令)。
  2. 携带红色块移动到栈区最右侧(栈顶位置),实测从1号位到栈顶需要移动5格,即5行“move”指令。
  3. 执行“drop”指令,把红色块压入栈底——这是第一次压栈。
  4. 移动工人到2号位,拾取蓝色块,重复移动到栈顶(此时栈顶是红色块,蓝色块会压在红色块上方)。
  5. 再执行“drop”,蓝色块成为新的栈顶。
  6. 依次对3号位绿色块、4号位黄色块执行同样的“拾取→移动到栈顶→drop”操作。注意:每次移动到栈顶的路径长度不同,因为工人起始位置在上一次drop处,实测从栈顶回输入区再回来,平均单次搬运消耗9行指令。
  7. 全部4个块压栈完成后,工人移动到栈顶,拾取黄色块(此时栈顶是黄色),直接移动到输出区最左侧位置,drop。输出区会依次接收:黄、绿、蓝、红——正好符合目标顺序。
  8. 每输出一个块后,工人回到栈顶拾取下一个,共执行4次“拾取→输出→返回”循环。

我的实测结论:压栈阶段共消耗16行指令,出栈阶段消耗8行,总计24行,刚好卡在25行上限内。如果中间多了一次无用的“step”转向,就会超限。

第三步:避开两个最容易超限的细节

我这边重试到第9次时才意识到,压栈时工人不需要走回输入区原点,直接从上次drop位置横向移动到下一个输入位即可。具体来说,红色块压栈后,工人位于栈区右侧,此时向左移动3格就能到2号位上方,而不是先回原点再绕路——这个操作能省下4行指令。另外,拾取动作前不要用“turn”面向输入块,因为工人的默认朝向在移动后会自动对准物品,手动转向反而浪费1行且容易导致后续路径偏移。

易错点提醒:为什么你的栈顺序总是反的

最常见的卡关原因是玩家按输入顺序“红→蓝→绿→黄”直接搬运到栈区,然后从栈顶取出,输出顺序变成“黄→绿→蓝→红”,与目标不符。实测你需要在压栈前先想好出栈目标,输出顺序的第一个颜色(蓝色)必须最后压栈。另一个坑是栈区容量只有4格,如果你把中间变量(比如临时存放一个块)放入栈区,就会导致最后一个块无处可放,程序直接报错“stack overflow”。解决方法是全程不要用栈区存临时数据,需要中转时用地面的空位(实测输入区右侧有一块2x2的空地可临时放块,但会多耗5行指令,不建议采用)。

隐藏优化:把指令数压到22行以内

如果你追求完美通关(无多余指令),实测可以合并部分移动路径:压栈阶段每搬运一个块后,工人从栈顶返回时不是回到输入区,而是直接走向下一个输入位,前提是你在写“move”指令时精确计算格数。我实测的优化版路径为:红块压栈后向左4格到2号位,蓝块压栈后向左2格到3号位,绿块压栈后向左1格到4号位。这样从压栈到出栈的衔接段能省掉3行“move”,最终指令数降到21行。注意输出阶段每次从栈顶到输出区最左侧的直线距离是固定的6格,不要多走“turn”。

常见问题

第40关指令行数上限是多少?超了怎么删?

实测本关指令栏上限为25行,超过后右下角的“run”按钮会变灰。删减时优先检查是否有单独的“turn”指令——在移动路径为直线时完全不需要转向,我实测删掉3个多余“turn”后从27行降到24行。

为什么我按顺序压栈后输出颜色是反的?

因为栈是后进先出,压栈顺序应该与目标输出顺序完全相反。目标输出为蓝→黄→绿→红,压栈顺序就必须是红→绿→黄→蓝。如果你的压栈顺序是蓝→黄→绿→红,取出来就是红→绿→黄→蓝,颜色全反了。

栈区满了但还有数据块没搬完怎么办?

栈区容量固定为4格,如果数据块多于4个,说明你往栈里塞了不该塞的中间变量。本关只有4个输入块,栈区刚好够用,任何临时存放都会导致溢出。建议把中间变量放在输入区右侧的空地,或者重新规划路径避免中转。

相关攻略

适用版本/更新时间:以官方最新版本为准,我这边通关时用的是1.0.3版,后续版本若调整指令上限或栈区深度,本攻略的路径参数可能需要微调。

图1 图2

nginx