📋 题目分析
✅ 简单介绍
本题目是开发机器人吸尘器操作逻辑的一部分。要求实现两个主要功能函数,控制吸尘器在一个 10x10 网格(
cleaning_space
)中移动、清洁。吸尘器具有如下特性:
- 记录当前位置(行、列)和朝向(8个罗盘方向);
- 能执行指定指令:转向、清洁、前进;
- 前进时可以污迹转移(如果起点脏的话);
- 碰到网格边界时,自动右转避免越界。
主要任务:
- 实现
vacuum_action(vacuum, action)
控制单步动作;
- 实现
perform_cleaning(instructions, vacuum)
批量执行动作序列。
💡 解题思路
核心任务拆解
🧩 1. vacuum_action(vacuum, action)
功能:根据输入指令执行单步操作,更新 vacuum 和 cleaning_space 状态。
具体逻辑:
- 转向:
- 定义顺序列表
["N", "NE", "E", "SE", "S", "SW", "W", "NW"]
; turn-left
:朝逆时针方向转一个单位;turn-right
:朝顺时针方向转一个单位;
如果大家还记得ASM1 Task1的卡萨密码… 向左转≈ index - 1,向有右转 ≈ index + 1
- 清洁:
- 将当前位置
(row, col)
在cleaning_space
标记为True
;
- 前进:
- 依据方向表,定义每个朝向对应的 (Δrow, Δcol);
- 尝试移动一格;
- 如果出界,✅ 不移动,转向右;
- 如果当前格子是脏的(False),移动后将新位置标记为脏(污迹转移)。
伪代码
🧾 2. perform_cleaning(instructions, vacuum)
功能:从指令文件中读取所有动作,依次调用
vacuum_action
执行。具体逻辑:
- 打开指定文件;
- 遍历每一行(即每条动作指令);
- 对每条指令,调用一次
vacuum_action(vacuum, action)
。
伪代码
📌 注意事项
- 禁止删除、重命名、改动函数签名与全局变量;
vacuum
列表内容应原地更新(行、列、方向);
cleaning_space
应根据动作实时同步更新;
- 注意正确处理方向变换,保持顺序循环(如 N 的左转是 NW,NW 的右转是 N);
- 前进时必须先检测越界,再决定是移动还是右转;
- 指令文件保证合法(小写,内容正确),不需额外校验;
if __name__ == "__main__":
代码块必须保留。
🧐 总结
很标准的一道模拟题,跟着题目要求走,问题不大,秒了。