You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Advent of Code 2021 Day1 程序输出值比真实值小2的问题排查

Advent of Code 2021 Day1 统计结果偏差问题排查

错误根因

  • 你读取文件得到的深度值全部是字符串类型,没有做整数转换,直接执行的是字符串字典序比较,不是数值大小比较。
    字符串比较会从左到右逐位比对字符的ASCII码,不会按数值进位逻辑判断大小:比如数值上100 > 99成立,但字符串比较时'100' < '99'——因为第一个字符'1'的ASCII码(49)小于'9'的ASCII码(57),这类位数不同的数值递增对会被误判为非递增。你遇到的结果恰好小2的情况,就是输入文件里刚好有2组这类跨位数的递增测量值被漏统计了。
  • 现有代码用depths.pop()直接删除最后一个元素的逻辑存在隐患:如果输入文件末尾没有空行,这个操作会直接删掉最后一个有效测量值,也会导致统计结果出错。

修正后可运行代码

# Advent of code 2021
# Day 1

# 读取输入文件
with open("input.txt") as file:
    # 逐行读取,过滤空行,统一转换为整数
    depths = [int(line.strip()) for line in file if line.strip()]

print(f"共读取{len(depths)}条深度测量数据")
increases = 0
# 统计比前一值大的测量次数
for i in range(1, len(depths)):
    prev = depths[i-1]
    curr = depths[i]
    if curr > prev:
        increases += 1
    print(f"进度:{i}/{len(depths)}", end='\r')

print()
print(f"深度递增总次数为:{increases}")

验证说明

用你给出的测试序列[1,2,3,2,1]运行修正后的代码,统计得到递增次数为2,和预期结果完全匹配。

内容的提问来源于stack exchange,提问作者Opti_byte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:51:17