📋 题目分析
✅ 简单介绍
本题是在之前的吸尘器基础上进行的扩展,考虑到清洁空间中可能存在障碍物(如墙壁、猫等),需要让吸尘器能够识别并避开这些障碍物。在执行“前进”动作时,吸尘器需要处理以下特殊情况:
- 碰到墙壁("w"):不移动,右转。
- 碰到猫("c"):猫会被推走一格(如果该位置为空)。
- 如果吸尘器将要越界,自动右转。
- 普通的清洁和方向转变操作与之前相同。
主要任务:
- 处理障碍物:让吸尘器避开墙壁,推动猫等;
- 更新日志记录:执行的每个动作都需要记录到日志文件中。
🧩 新增/修改的功能需求
🧹 1. vacuum_action(vacuum, action)
在之前的基础上,新增了对障碍物的处理:
- 前进时判断:
- 越界:如果前进会超出边界,执行右转;
- 墙壁("w"):如果前方是墙壁,执行右转;
- 猫("c"):如果前方有猫,猫会被推走一格,如果推走的位置没有其他障碍,猫会移动;否则执行右转;
- 脏地:前进后将当前位置清洁标记为脏(False)。
🧾 2. perform_cleaning(instructions, vacuum, log)
- 按照指令逐行执行,并在每次执行操作后将实际执行的动作记录到日志文件中。
- 日志记录:每个操作(包括右转替代的操作)都需要写入日志。
💡 解题思路
核心任务拆解
🧩 1. vacuum_action(vacuum, action)
功能:根据指令执行单步动作,并更新吸尘器的状态。
- 转向:
turn-left
、turn-right
:与之前一致;
- 清洁:
- 与之前一致,清洁当前所在位置;
- 前进:
- 检查前方是否越界,若越界则执行右转;
- 如果前方是墙壁("w"),则右转;
- 如果前方是猫("c"),尝试将猫推移一格,若无障碍则猫移动,否则右转;
- 如果前方是脏地(
False
),则“推”脏物并更新该位置。
伪代码
🧾 2. perform_cleaning(instructions, vacuum, log)
功能:从指令文件中读取每条指令并执行,同时记录每次实际执行的动作。
- 打开指令文件;
- 读取并执行每一行指令;
- 每执行一次操作(无论是转向还是前进)都写入日志。
📌 注意事项
- 避免越界:前进操作前必须检测是否会超出边界,若会则右转。
- 障碍物检测:
- 墙壁("w")与越界检测一样,需要右转;
- 猫("c")会被推移一格,但必须检查推移后的地方是否为空;
- 日志记录:每次执行的操作(包括右转)都需要记录到日志中;
- 确保正确更新空间状态:
cleaning_space
和obstruction_space
必须在每次操作后更新;
- 禁止修改函数签名:不允许更改给定的函数名称和参数。
🧐 总结
本题在之前的基础上加入了对障碍物(如猫和墙壁)的处理逻辑,使得吸尘器在执行任务时更加智能:
- 吸尘器会避开墙壁,推动猫并清洁地面;
- 在每次执行指令时,我们还需要记录操作日志,便于追踪执行过程。
我们依旧跟着题目边读边做,问题不大,秒了。