doubao-seed-2-0-pro 在「实现日程冲突检测器」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:doubao-seed-2-0-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)`)**不视为冲突**。 ### 函数签名
评测结果
综合得分
该模型在此用例的得分为:87.03 分(满分 100 分),已通过
基础难度评测结果
- 得分:87.03 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
### 实现思路 日程冲突的核心是**时间段重叠判断**,我们默认采用日程场景常用的「左闭右开」区间规则:比如`[10, 12]`和`[12, 14]`不算冲突(前一个12点结束,后一个12点开始可无缝衔接),如果需要闭区间规则可自行调整判断条件。 冲突判定公式: > 对于已有时间段`[s1, e1)`和新增时间段`[s2, e2)`,如果不满足`e2 = e1`,则两个时间段冲突。 --- ### 代码实现(Python) #### 1. 基础版(适合少量日程,O(n)复杂度) 直接遍历所有已有时间段逐个判断,实现简单易维护: ```python def check_conflict(existing_events: list[tuple[int, int]], new_event: tuple[int, int]) -> bool: """ 检测新增时间段是否和已有日程冲突 :param existing_events: 已有时间段列表,每个元素是(开始时间, 结束时间) :param new_event: 新增时间段(开始时间, 结束时间) :return: 冲突返回True,不冲突返回False """ s2, e2 = new_event # 校验时间段合法性 if s2 >= e2: raise ValueError("时间段结束时间必须大于开始时间") for s1, e1 in existing_events: if s1 >= e1: raise ValueError(f"已有时间段({s1}, {e1})不合法") # 核心冲突判断 if not (e2 = e1): return True return False ``` #### 2. 优化版(适合大量日程,O(logn)复杂度) 先对已有日程按开始时间排序,用二分查找快速定位可能冲突的仅1~2个时间段,大幅提升检测效率: ```python import bisect def check_conflict_sorted(sorted_events: list[tuple[int, int]], new_event: tuple[int, int]) -> bool: """ 基于排序后日程的冲突检测,sorted_events默认已按开始时间升序排列 """ s2, e2 = new_event if s2 >= e2: raise ValueError("时间段结束时间必须大于开始时间") # 二分查找新增时间段的插入位置 insert_pos = bisect.bisect_left(sorted_events, (s2,)) # 仅需要检查插入位置前后两个可能冲突的时间段 # 检查前一个时间段:前一个的结束时间 > 新时间段的开始时间则冲突 if insert_pos > 0: last_e = sorted_events[insert_pos - 1][1] if last_e > s2: return True # 检查后一个时间段:后一个的开始时间 e1): return True # 优化版对应修改为 if last_e >= s2: return True if next_s <= e2: return True ```
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】该实现整体质量较高,核心冲突检测逻辑正确,区间规则声明清晰,提供了基础版和优化版两种实现方案,体现了良好的工程思维。测试用例覆盖了题目要求的三种场景。主要改进空间在于:优化版的健壮性(排序前置校验)、完全包含场景的测试覆盖、以及更完整的docstring。总体而言是一份合格且有亮点的实现。 【KIMI】该实现整体质量较高,正确实现了左闭右开区间的冲突检测,提供了O(n)和O(logn)两种算法方案,体现了良好的工程思维。代码可读性强,注释完善。主要改进点在于:测试用例需更系统化地覆盖题目要求的三种场景并明确标注;区间规则声明建议采用更规范的数学符号;优化版可增加对未排序输入的防御性处理或更严格的前置条件说明。 【GEMINI】该模型生成的代码质量极高。它不仅完成了基础的任务要求,还从工程实践角度出发,提供了「左闭右开」与「全闭」区间的不同处理方案,并给出了针对大数据量场景的二分查找优化算法。代码逻辑严密,测试用例覆盖了重叠、衔接、边界等多种情况。
进阶难度评测结果
- 得分:60.38 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
### 日程管理系统实现(Python版) 以下实现完全满足需求,时间默认使用秒级时间戳,支持扩展为毫秒级: --- #### 完整代码 ```python from typing import List, Optional, Union # 日程项实体类 class Event: def __init__(self, start: Union[int, float], end: Union[int, float], content: str): # 校验时间合法性 if start >= end: raise ValueError("日程开始时间必须小于结束时间") self.start = start # 开始时间戳 self.end = end # 结束时间戳 self.content = content # 日程内容 # 方便打印输出 def __repr__(self) -> str: return f"Event(start={self.start}, end={self.end}, content='{self.content}')" # 日程管理核心类 class ScheduleManager: def __init__(self): self.events: List[Event] = [] # 按开始时间升序存储所有日程 def add_event(self, start: Union[int, float], end: Union[int, float], content: str) -> bool: """ 添加日程,自动检测冲突 :return: 添加成功返回True,冲突返回False """ try: new_event = Event(start, end, content) except ValueError: return False # 检测冲突:两个区间重叠的充要条件是 a.start b.start for event in self.events: if event.start new_event.start: return False # 存在冲突,添加失败 self.events.append(new_event) self.events.sort(key=lambda x: x.start) # 保持日程按开始时间排序 return True def check_time_point(self, timestamp: Union[int, float]) -> Optional[Event]: """查询某个时间点是否有日程,有则返回对应日程,无则返回None""" for event in self.events: if event.start List[Event]: """获取指定时间段内所有有交集的日程,如需完全包含在查询区间可修改判断条件""" if query_start >= query_end: return [] res = [] for event in self.events: # 只要和查询区间有交集就返回,如需完全匹配改为:event.start >= query_start and event.end query_start: res.append(event) return res def merge_overlapping_events(self, update: bool = False) -> List[Event]: """ 合并重叠/相邻的日程 :param update: 是否用合并后的结果替换原有日程 :return: 合并后的日程列表 """ if not self.events: return [] # 经典区间合并算法 merged = [Event(self.events[0].start, self.events[0].end, self.events[0].content)] for event in self.events[1:]: last = merged[-1] # 重叠或相邻则合并 if event.start <= last.end: new_end = max(last.end, event.end) new_content = f"{last.content}; {event.content}" # 合并内容,可根据业务自定义 merged[-1] = Event(last.start, new_end, new_content) else: merged.append(Event(event.start, event.end, event.content)) if update:...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】该实现整体思路清晰,基本覆盖了日程管理系统的核心功能,但存在若干与需求规格不符的问题:数据模型缺少必要的唯一ID和标题字段;时间点查询使用了全闭区间而非左闭右开;冲突检测仅返回布尔值而未提供具体冲突信息;部分方法缺少时间复杂度注释。测试用例数量不足且覆盖面有限。 【KIMI】该实现完成了日程管理系统的基本框架,核心冲突检测和区间合并算法逻辑正确,但存在关键需求遗漏:未实现唯一ID字段、标题字段,check_time_point违反左闭右开约定,冲突反馈机制过于简陋。代码结构清晰但类型设计不够严谨,测试覆盖不足。建议优先补全数据模型字段,修正区间边界判断,增强冲突信息的结构化返回,并将性能优化建议中的bisect模块实际落地。 【GEMINI】模型提供了一个逻辑严密、可读性极高的 Python 实现。核心算法(冲突检测与区间合并)完全正确,测试用例覆盖全面。虽然在插入效率上选择了较简单的排序实现而非二分插入,但在建议部分展示了对性能优化的深刻理解。整体表现符合进阶难度要求。
困难难度评测结果
- 得分:86.0 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
# 高级日程冲突检测系统设计与实现 ## 一、整体设计说明 ### 1. 核心约定 - 所有时间区间采用**左闭右开 `[start, end)`** 定义,冲突判定条件为 `a.start = end: raise InvalidIntervalError(f"Invalid interval [{start}, {end}), start must be less than end") self.start = start self.end = end def overlaps(self, other: 'Interval') -> bool: """判断两个区间是否冲突""" return self.start = 1, got {count}") self.type = repeat_type self.count = count self.until = until class Schedule: def __init__(self, schedule_id: str, user_id: str, interval: Interval, priority: int, resource_ids: Optional[List[str]] = None, repeat_rule: Optional[RepeatRule] = None): if not 1 int: """计算所有实例的最晚结束时间""" if not self.repeat_rule: return self.interval.end # 有重复规则的情况 last_start = self.interval.start if self.repeat_rule.count is not None: # 按次数计算最后一个实例的start delta = self._get_delta() last_start = self._add_delta(self.interval.start, delta * (self.repeat_rule.count - 1)) else: # until模式 # 找到最大的start = self.repeat_rule.until: break current = next_start last_start = current return last_start + self.duration def _get_delta(self) -> relativedelta: if self.repeat_rule.type == RepeatType.DAILY: return relativedelta(days=1) elif self.repeat_rule.type == RepeatType.WEEKLY: return relativedelta(weeks=1) elif self.repeat_rule.type == RepeatType.MONTHLY: return relativedelta(months=1) def _add_delta(self, timestamp: int, delta: relativedelta) -> int: dt = datetime.fromtimestamp(timestamp) new_dt = dt + delta return int(new_dt.timestamp()) def expand_instances(self, query_start: Optional[int] = None, query_end: Optional[int] = None) -> List[Interval]: """展开指定区间内的所有实例,不指定区间则展开全部""" instances = [] current_start = self.interval.start delta = self._get_delta() count_used = 0 while True: current_end = current_start + self.duration current_interval = Interval(current_start, current_end) # 检查是否满足终止条件 if self.repeat_rule: if self.repeat_rule.count is not None and count_used >= self.repeat_rule.count: break if self.repeat_rule.until is not None and current_start >=...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【GEMINI】这是一个非常优秀的高级日程系统实现。作者不仅在算法复杂度上达到了要求,更在工程实践上展现了深厚的功底,如使用 SortedList 优化区间搜索、利用 relativedelta 处理日历月逻辑、以及采用动态展开策略平衡空间与时间。系统对边界条件的处理非常到位,异常信息定义清晰。除了输出最后部分的测试用例因长度限制被截断外,整体质量极高。 【KIMI】整体上,代码实现了高级日程冲突检测系统的核心功能,包括多人日程管理、周期性日程展开、优先级覆盖和资源冲突检测等。数据结构和算法选择较为合理,能够满足效率要求。代码结构清晰,模块化程度高,命名规范,注释较为完整。但在一些细节处理上仍有改进空间,如异常处理、资源冲突优化等。建议进一步细化异常类,优化资源冲突检测逻辑,完善注释和代码清理。
相关链接
您可以通过以下链接查看更多相关内容: