Lazy loaded image
Task 3 - Robot Revolution
Words 863Read Time 3 min
2025-4-27

📋 题目分析

✅ 简单介绍

本题目是开发机器人吸尘器操作逻辑的一部分。要求实现两个主要功能函数,控制吸尘器在一个 10x10 网格(cleaning_space)中移动、清洁。
吸尘器具有如下特性:
  • 记录当前位置(行、列)和朝向(8个罗盘方向);
  • 能执行指定指令:转向、清洁、前进;
  • 前进时可以污迹转移(如果起点脏的话);
  • 碰到网格边界时,自动右转避免越界。
主要任务:
  1. 实现 vacuum_action(vacuum, action) 控制单步动作;
  1. 实现 perform_cleaning(instructions, vacuum) 批量执行动作序列。

💡 解题思路

核心任务拆解


🧩 1. vacuum_action(vacuum, action)

功能:根据输入指令执行单步操作,更新 vacuum 和 cleaning_space 状态。
具体逻辑:
  • 转向
    • 定义顺序列表 ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]
    • 如果大家还记得ASM1 Task1的卡萨密码… 向左转≈ index - 1,向有右转 ≈ index + 1
    • turn-left:朝逆时针方向转一个单位;
    • turn-right:朝顺时针方向转一个单位;
  • 清洁
    • 将当前位置 (row, col)cleaning_space 标记为 True
  • 前进
    • 依据方向表,定义每个朝向对应的 (Δrow, Δcol);
    • 尝试移动一格;
    • 如果出界,✅ 不移动,转向右;
    • 如果当前格子是脏的(False),移动后将新位置标记为脏(污迹转移)。

伪代码


🧾 2. perform_cleaning(instructions, vacuum)

功能:从指令文件中读取所有动作,依次调用 vacuum_action 执行。
具体逻辑:
  • 打开指定文件;
  • 遍历每一行(即每条动作指令);
  • 对每条指令,调用一次 vacuum_action(vacuum, action)

伪代码

📌 注意事项

  1. 禁止删除、重命名、改动函数签名与全局变量;
  1. vacuum 列表内容应原地更新(行、列、方向);
  1. cleaning_space 应根据动作实时同步更新;
  1. 注意正确处理方向变换,保持顺序循环(如 N 的左转是 NW,NW 的右转是 N);
  1. 前进时必须先检测越界,再决定是移动还是右转;
  1. 指令文件保证合法(小写,内容正确),不需额外校验;
  1. if __name__ == "__main__": 代码块必须保留。

🧐 总结

很标准的一道模拟题,跟着题目要求走,问题不大,秒了。