doubao-seed-2-1-pro 在「实现日程冲突检测器」的评测结果

这是该 AI 模型在此测试用例上的详细评测结果。

基本信息

  • 模型名称:doubao-seed-2-1-pro
  • 用例名称:实现日程冲突检测器
  • 测试类型:文本生成
  • 评测维度:代码生成

系统提示词(System Prompt)

这是给 AI 模型的背景设定和角色指令:

你是一名资深后端工程师,擅长算法设计与数据结构应用。 回答要求: 1. 在实现前,先用注释或文字明确说明区间的开闭规则(如左闭右开 [start, end) 或全闭 [start, end]),并说明端点相邻(如 [1,3] 与 [3,5])是否视为冲突。 2. 代码需包含清晰的函数签名、参数说明和返回值说明。 3. 给出至少 3 个测试用例,覆盖正常冲突、无冲突、边界相邻三种场景。 4. 代码风格整洁,变量命名语义化,逻辑层次清晰。

用户提示词(User Prompt)

这是用户给 AI 模型的具体任务要求:

## 题目:实现简单的日程冲突检测器 请实现一个日程冲突检测函数,用于判断新增的时间段是否与已有时间段列表中的任意一个发生冲突。 ### 背景说明 - 时间用整数表示(可理解为小时数或任意时间单位)。 - 每个时间段由 `(start, end)` 表示,其中 `start < end`。 - **区间规则(请在代码中明确声明)**:采用 **左闭右开** 区间 `[start, end)`,即两个区间端点恰好相邻(如 `[1, 3)` 与 `[3, 5)`)**不视为冲突**。 ### 函数签名

评测结果

综合得分

该模型在此用例的得分为:100.0 分(满分 100 分),已通过

基础难度评测结果

  • 得分:100.0 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

### 区间规则前置声明 在代码实现前,首先明确时间区间规则: 1. 所有时间段采用**左闭右开**表示:即区间为 `[start, end)`,包含起始时刻 `start`,不包含结束时刻 `end` 2. 冲突判定:两个区间存在公共时间点时视为冲突 3. 端点相邻规则:若一个区间的结束端点恰好等于另一个区间的起始端点(如 `[1,3)` 与 `[3,5)`),两者无公共时间点,**不视为冲突** --- ### 代码实现 ```python """ 简单日程冲突检测器 基于左闭右开区间规则实现,端点相邻不判定为冲突 """ from typing import List, Tuple def has_schedule_conflict( existing_schedules: List[Tuple[int, int]], new_schedule: Tuple[int, int] ) -> bool: """ 检测新增日程是否与已有日程存在时间冲突 参数: existing_schedules: 已有日程列表,每个元素为 (start, end) 格式的元组, 约定每个合法时间段满足 start = end 的非法时间段时抛出 """ new_start, new_end = new_schedule # 校验新增日程合法性 if new_start >= new_end: raise ValueError( f"新增时间段({new_start}, {new_end})不合法,要求start必须小于end" ) # 遍历所有已有日程逐一检测冲突 for exist_sched in existing_schedules: exist_start, exist_end = exist_sched # 校验当前已有日程合法性 if exist_start >= exist_end: raise ValueError( f"已有时间段({exist_start}, {exist_end})不合法,要求start必须小于end" ) # 冲突判定核心逻辑(左闭右开规则下的重叠充要条件): # 两个区间重叠 = 新日程结束时间 > 已有日程开始时间 AND 已有日程结束时间 > 新日程开始时间 # 该逻辑自动排除端点相邻场景:如new_end=3、exist_start=3时,3>3不成立,不会判定为冲突 is_conflict = (new_end > exist_start) and (exist_end > new_start) if is_conflict: return True # 所有日程均检测通过,无冲突 return False # ------------------------------ # 测试用例实现 # ------------------------------ def run_tests(): """执行覆盖全场景的测试用例""" test_cases = [ # 场景1:边界相邻(无冲突) { "name": "双向相邻-无冲突", "existing": [(1, 3), (6, 8)], "new": (3, 6), "expected": False }, { "name": "尾部接头部相邻-无冲突", "existing": [(5, 7)], "new": (2, 5), "expected": False }, # 场景2:正常冲突(覆盖多种重叠形态) { "name": "部分尾部重叠-有冲突", "existing": [(1, 4), (8, 10)], "new": (3, 7), "expected": True }, { "name": "新日程被完全包含-有冲突", "existing": [(1, 10)], "new": (3, 5), "expected": True }, { "name": "新日程完全包含已有-有冲突", "existing": [(3, 5)], "new": (1, 10), "expected": True }, { "name": "部分头部重叠-有冲突", "existing": [(5, 8)], "new": (3, 6), "expected": True }, { "name": "完全重合-有冲突", "existing": [(2, 5)], "new": (2, 5), "expected": True }, # 场景3:完全无冲突 { "name": "两日程中间无重叠-无冲突", "existing": [(2, 5), (9, 12)], "new": (6, 8), "expected": False...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【GEMINI】该生成结果是一份高质量的后端代码实现。模型精准捕捉了用户在对话背景中提出的所有细节要求,特别是对区间开闭规则的理解和逻辑实现无懈可击。虽然元数据中的任务描述提到了合并和查询功能,但由于用户在具体对话中明确要求实现的是“冲突检测函数”,模型针对性地完成了该核心任务,并提供了极为详尽的测试套件和性能优化建议,表现非常出色。

进阶难度评测结果

  • 得分:92.6 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

### 日程管理系统实现 以下实现严格遵循左闭右开区间约定,明确边界处理规则,核心操作通过二分查找保证效率,附带完整注释与测试用例。 ```python from dataclasses import dataclass import bisect from typing import List, Dict, Optional @dataclass(frozen=True) class Schedule: """ 日程实体类,区间定义为**左闭右开 [start, end)** 设计决策:采用不可变模式(frozen=True),防止外部修改导致内部索引数据不一致 Attributes: id: 日程唯一标识,非空字符串 title: 日程标题,字符串 start: 开始时间戳,整数秒级Unix时间,区间包含该时刻 end: 结束时间戳,整数秒级Unix时间,区间不包含该时刻 """ id: str title: str start: int end: int def __post_init__(self): """实例化时完成参数合法性校验,从源头避免非法日程对象""" # ID类型与非空校验 if not isinstance(self.id, str): raise TypeError("日程ID必须是字符串类型") if not self.id: raise ValueError("日程ID不能为空字符串") # 标题类型校验 if not isinstance(self.title, str): raise TypeError("日程标题必须是字符串类型") # 时间类型校验:排除布尔值(Python中bool是int子类,需单独判断) if (not isinstance(self.start, int) or isinstance(self.start, bool) or not isinstance(self.end, int) or isinstance(self.end, bool)): raise TypeError("开始/结束时间必须是整数类型Unix时间戳,不支持布尔值或浮点数") # 区间合法性校验:左闭右开区间要求start = self.end: raise ValueError(f"非法日程:开始时间({self.start})必须早于结束时间({self.end}),零长度区间不被允许") class ScheduleManager: """ 日程管理器,提供日程增删查与冲突检测能力 内部存储结构设计: 1. _id_to_schedule: ID到日程对象的映射,支持O(1)按ID查找 2. _schedules: 按start升序排列的日程列表,所有日程无时间冲突 3. _starts: 与_schedules一一对应,存储各日程start时间,严格升序,用于二分查找 4. _ends: 与_schedules一一对应,存储各日程end时间,因日程无重叠故也严格升序,用于二分查找 冲突规则(基于左闭右开): - 两个区间存在重叠(即 A.start None: """ 添加新日程,自动检测ID唯一性与时间冲突 时间复杂度:O(n),n为当前日程总数;其中冲突检测为O(logn),动态数组插入为O(n)(Python列表固有开销) Args: schedule_id: 日程唯一ID title: 日程标题 start: 开始时间戳 end: 结束时间戳 Raises: TypeError: 参数类型不合法时抛出 ValueError: ID重复、时间非法、时间冲突时抛出 """ # 构造Schedule对象,自动触发参数合法性校验 new_sch = Schedule(id=schedule_id, title=title, start=start, end=end) # 1. ID唯一性校验 if new_sch.id in self._id_to_schedule: raise ValueError(f"添加失败:日程ID[{new_sch.id}]已存在") s, e = new_sch.start, new_sch.end # 2. 二分查找定位可能冲突的区间范围 # 右边界:第一个start >= 新日程end的位置,该位置之后的日程必然不冲突 conflict_end_idx = bisect.bisect_left(self._starts, e) # 左边界:第一个end > 新日程start的位置,该位置之前的日程必然不冲突 conflict_start_idx = bisect.bisect_right(self._ends, s) # 3....

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【KIMI】该实现是一份专业级的日程冲突检测系统代码,在功能正确性、数据结构设计和代码质量方面均表现优异。严格遵循左闭右开区间约定,边界处理严谨,充分利用二分查找优化核心操作效率。测试覆盖全面,注释详尽,体现了资深工程师的系统设计能力。 minor 改进空间在于冲突信息的结构化输出和测试代码的少量冗余。

相关链接

您可以通过以下链接查看更多相关内容:

加载中...