📋 题目分析
✅ 简单介绍
在本题中,我们的吸尘器除了清洁功能外,还具备了拖地功能。吸尘器可以处理不同类型的脏物,除了能够清洁“脏物”(dirt)外,还能拖拭水(water)和泥巴(mud)。新的功能涉及到以下几种情况:
- 清洁操作:如果吸尘器当前所在的位置是脏的("d"),它会进行清洁,变为干净(None)。
- 拖地操作:如果吸尘器当前所在的位置是水("l"),它会进行拖地操作,变为干净(None)。
- 前进操作:前进时,吸尘器的行为依赖于当前所在的位置:
- 脏地("d"):前进时,脏地会被涂抹到吸尘器到达的位置。
- 水("l"):前进时,吸尘器会“滑动”,会跳过一个位置并在该位置涂抹水。
- 泥巴("m"):前进时,泥巴会被涂抹到吸尘器到达的位置。
- 障碍物:吸尘器依旧会避开墙壁("w"),并会推动猫("c")等障碍物。
💡 解题思路
核心任务拆解
🧩 1. vacuum_action(vacuum, action)
功能:根据指令执行单步动作,并更新吸尘器的状态。
- 转向:
turn-left
、turn-right
:与之前一致;
- 清洁操作:
clean
:如果当前所在位置是脏的("d"),清洁该位置。
- 拖地操作:
mop
:如果当前所在位置是水("l"),拖地操作,将水清除。
- 前进操作:
- 脏地("d"):前进时,脏地将被涂抹到吸尘器到达的位置;
- 水("l"):前进时,吸尘器会跳跃两个位置并涂抹水;
- 泥巴("m"):前进时,泥巴会被涂抹到吸尘器到达的位置;
- 障碍物:
- 如果吸尘器前进时会碰到墙壁("w")或猫("c"),则右转。
🧾 2. perform_cleaning(instructions, vacuum, log)
- 执行指令:从文件读取指令,每行指令会被传给
vacuum_action
执行;
- 日志记录:每次执行的操作需要记录到日志文件中。
没有变化,直接复制粘贴之前的代码就完事了
📌 注意事项
- 前进操作细节:
- 如果吸尘器前进时遇到水("l"),它将跳跃两个位置,水会涂抹到跳过的位置;
- 位置类型为脏地("d")、**水("l")或泥巴("m")**的处理需要根据不同的逻辑进行相应的更新。
- 避开障碍物:
- 如果前方有墙壁("w"),吸尘器需要右转;
- 如果前方是猫("c"),吸尘器推动猫(如果推移位置空闲),否则右转。
- 日志记录:执行的每个操作,包括右转操作,都需要记录到日志文件中。
- 边界处理:如果前进会越界,吸尘器也会执行右转操作。
🧐 总结
本题在之前的基础上增加了拖地功能,并且处理了更多种类的脏物(如水和泥巴),还新增了滑动的机制。当吸尘器遇到水时,它会跳跃一个位置并涂抹水,避免滑出边界或与障碍物重叠。所有的操作还需记录在日志中,确保执行的每个动作都有痕迹。但是..问题不大,秒了。