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

Advent of Code 2022 Day8 Part1代码问题:样例正确实际输入不符

Advent of Code 2022 第8天问题及代码排查

问题描述

探险队遇到一片整齐种植成网格的高大树林。精灵们解释说这是之前的探险队为重新造林种下的。现在他们好奇这里是否适合建造树屋。

首先要判断这里是否有足够的树木遮挡来隐藏树屋。为此,你需要统计从网格外沿行或列直视时可见的树木数量。

精灵们已经用无人机生成了一张记录每棵树高度的地图(即你的谜题输入)。例如:

30373
25512
65332
33549
35390

每棵树用一个数字表示高度,0最矮,9最高。

一棵树木可见的条件是:它与网格边缘之间的所有其他树木都比它矮。仅考虑同一行或列的树木,即只能从任意树木的上、下、左、右方向查看。

网格边缘的所有树木都是可见的——因为它们本身就在边缘,没有树木遮挡视线。在这个例子中,只剩下内部9棵树需要考虑:

  • 左上角的5从左和上方可见(从右或下方不可见,因为有其他高度为5的树木阻挡)。
  • 上方中间的5从上方和右方可见。
  • 右上角的1从任何方向都不可见;要可见的话,它与边缘之间只能有高度为0的树木。
  • 左侧中间的5仅从右方可见。
  • 中心的3从任何方向都不可见;要可见的话,它与边缘之间只能有高度至多为2的树木。
  • 右侧中间的3从右方可见。
  • 底部行的中间5可见,但3和4不可见。

边缘有16棵可见树木,内部还有5棵,总共21棵可见树木。

查看你的地图,统计从网格外可见的树木总数是多少?

我的解决方案代码

with open('day8.in') as file:
    forest = file.read().strip()

trees = [list(x) for x in forest.split('\n')]

visible = (len(trees) - 1) * 4

for i in range(1, len(trees) - 1):
    for j in range(1, len(trees[i]) - 1):

        if trees[i][j] > trees[i][j - 1]:
            for k in range(j - 1, -1, -1):
                if trees[i][k] > trees[i][j]:
                    break
                if k == 0 and trees[i][k] < trees[i][j]:
                    visible += 1

        elif trees[i][j] > trees[i][j + 1]:
            for k in range(j + 1, len(trees[i])):
                if trees[i][k] > trees[i][j]:
                    break
                if k == len(trees[i]) - 1 and trees[i][k] < trees[i][j]:
                    visible += 1

        elif trees[i][j] > trees[i - 1][j]:
            for k in range(i - 1, -1, -1):
                if trees[k][j] > trees[i][j]:
                    break
                if k == 0 and trees[k][j] < trees[i][j]:
                    visible += 1

        elif trees[i][j] > trees[i + 1][j]:
            for k in range(i + 1, len(trees)):
                if trees[k][j] > trees[i][j]:
                    break
                if k == len(trees) - 1 and trees[k][j] < trees[i][j]:
                    visible += 1

print(visible)

遇到的问题

运行代码处理样例输入时能得到正确结果21,但处理实际的99x99网格输入时结果不符合预期。已尝试添加打印语句验证样例逻辑,未发现问题;确认初始visible变量计算正确,但实际输入过大无法手动排查错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:10:35