Lazy loaded image
Task 4 - Unexpected Obstruction
Words 1339Read Time 4 min
2025-4-27

📋 题目分析

✅ 简单介绍

本题是在之前的吸尘器基础上进行的扩展,考虑到清洁空间中可能存在障碍物(如墙壁、猫等),需要让吸尘器能够识别并避开这些障碍物。在执行“前进”动作时,吸尘器需要处理以下特殊情况:
  • 碰到墙壁("w"):不移动,右转。
  • 碰到猫("c"):猫会被推走一格(如果该位置为空)。
  • 如果吸尘器将要越界,自动右转。
  • 普通的清洁和方向转变操作与之前相同。
主要任务:
  1. 处理障碍物:让吸尘器避开墙壁,推动猫等;
  1. 更新日志记录:执行的每个动作都需要记录到日志文件中。

🧩 新增/修改的功能需求

🧹 1. vacuum_action(vacuum, action)

在之前的基础上,新增了对障碍物的处理:
  • 前进时判断
    • 越界:如果前进会超出边界,执行右转;
    • 墙壁("w"):如果前方是墙壁,执行右转;
    • ("c"):如果前方有猫,猫会被推走一格,如果推走的位置没有其他障碍,猫会移动;否则执行右转;
    • 脏地:前进后将当前位置清洁标记为脏(False)。

🧾 2. perform_cleaning(instructions, vacuum, log)

  • 按照指令逐行执行,并在每次执行操作后将实际执行的动作记录到日志文件中。
  • 日志记录:每个操作(包括右转替代的操作)都需要写入日志。

💡 解题思路

核心任务拆解


🧩 1. vacuum_action(vacuum, action)

功能:根据指令执行单步动作,并更新吸尘器的状态。
  • 转向
    • turn-leftturn-right:与之前一致;
  • 清洁
    • 与之前一致,清洁当前所在位置;
  • 前进
    • 检查前方是否越界,若越界则执行右转;
    • 如果前方是墙壁("w"),则右转;
    • 如果前方是猫("c"),尝试将猫推移一格,若无障碍则猫移动,否则右转;
    • 如果前方是脏地(False),则“推”脏物并更新该位置。

伪代码

 

🧾 2. perform_cleaning(instructions, vacuum, log)

功能:从指令文件中读取每条指令并执行,同时记录每次实际执行的动作。
  • 打开指令文件;
  • 读取并执行每一行指令;
  • 每执行一次操作(无论是转向还是前进)都写入日志。

📌 注意事项

  1. 避免越界:前进操作前必须检测是否会超出边界,若会则右转。
  1. 障碍物检测
      • 墙壁("w")与越界检测一样,需要右转;
      • 猫("c")会被推移一格,但必须检查推移后的地方是否为空;
  1. 日志记录:每次执行的操作(包括右转)都需要记录到日志中;
  1. 确保正确更新空间状态cleaning_spaceobstruction_space 必须在每次操作后更新;
  1. 禁止修改函数签名:不允许更改给定的函数名称和参数。

🧐 总结

本题在之前的基础上加入了对障碍物(如猫和墙壁)的处理逻辑,使得吸尘器在执行任务时更加智能:
  • 吸尘器会避开墙壁,推动猫并清洁地面;
  • 在每次执行指令时,我们还需要记录操作日志,便于追踪执行过程。
我们依旧跟着题目边读边做,问题不大,秒了。