Lazy loaded image
Task 5 - Sticky Business
Words 1229Read Time 4 min
2025-4-27

📋 题目分析

✅ 简单介绍

在本题中,我们的吸尘器除了清洁功能外,还具备了拖地功能。吸尘器可以处理不同类型的脏物,除了能够清洁“脏物”(dirt)外,还能拖拭水(water)和泥巴(mud)。新的功能涉及到以下几种情况:
  1. 清洁操作:如果吸尘器当前所在的位置是脏的("d"),它会进行清洁,变为干净(None)。
  1. 拖地操作:如果吸尘器当前所在的位置是水("l"),它会进行拖地操作,变为干净(None)。
  1. 前进操作:前进时,吸尘器的行为依赖于当前所在的位置:
      • 脏地("d"):前进时,脏地会被涂抹到吸尘器到达的位置。
      • 水("l"):前进时,吸尘器会“滑动”,会跳过一个位置并在该位置涂抹水。
      • 泥巴("m"):前进时,泥巴会被涂抹到吸尘器到达的位置。
  1. 障碍物:吸尘器依旧会避开墙壁("w"),并会推动猫("c")等障碍物。

💡 解题思路

核心任务拆解


🧩 1. vacuum_action(vacuum, action)

功能:根据指令执行单步动作,并更新吸尘器的状态。
  • 转向
    • turn-leftturn-right:与之前一致;
  • 清洁操作
    • clean:如果当前所在位置是脏的("d"),清洁该位置。
  • 拖地操作
    • mop:如果当前所在位置是水("l"),拖地操作,将水清除。
  • 前进操作
    • 脏地("d"):前进时,脏地将被涂抹到吸尘器到达的位置;
    • 水("l"):前进时,吸尘器会跳跃两个位置并涂抹水;
    • 泥巴("m"):前进时,泥巴会被涂抹到吸尘器到达的位置;
    • 障碍物
      • 如果吸尘器前进时会碰到墙壁("w")或猫("c"),则右转。

🧾 2. perform_cleaning(instructions, vacuum, log)

  • 执行指令:从文件读取指令,每行指令会被传给 vacuum_action 执行;
  • 日志记录:每次执行的操作需要记录到日志文件中。
没有变化,直接复制粘贴之前的代码就完事了

📌 注意事项

  1. 前进操作细节
      • 如果吸尘器前进时遇到水("l"),它将跳跃两个位置,水会涂抹到跳过的位置;
      • 位置类型为脏地("d")、**水("l")泥巴("m")**的处理需要根据不同的逻辑进行相应的更新。
  1. 避开障碍物
      • 如果前方有墙壁("w"),吸尘器需要右转;
      • 如果前方是猫("c"),吸尘器推动猫(如果推移位置空闲),否则右转。
  1. 日志记录:执行的每个操作,包括右转操作,都需要记录到日志文件中。
  1. 边界处理:如果前进会越界,吸尘器也会执行右转操作。

🧐 总结

本题在之前的基础上增加了拖地功能,并且处理了更多种类的脏物(如水和泥巴),还新增了滑动的机制。当吸尘器遇到水时,它会跳跃一个位置并涂抹水,避免滑出边界或与障碍物重叠。所有的操作还需记录在日志中,确保执行的每个动作都有痕迹。但是..问题不大,秒了。