我正在查看将坐标存储为复数的solution到Advent of Code puzzle:
heightmap = {
complex(x, y): c
for y, ln in enumerate(sys.stdin.read().strip().split("\n"))
for x, c in enumerate(ln)
}
然后按如下方式访问它们:
for xy, c in heightmap.items():
for d in (1, -1, 1j, -1j):
if ord(heightmap.get(xy + d, "{")) <= ord(c) + 1:
G.add_edge(xy, xy + d)
我可以看到,这段代码使“get neighbors”这一行变得容易编写/思考,但我不认为它值得增加复杂性(没有双关语)。
有人能解释一下为什么把网格坐标存储为复数很有用吗?
1条答案
按热度按时间wn9m85ua1#
是的,因为它很容易/更少的写作和思考。也意味着更少的错别字的机会:-)
我已经这样做了很多年了,自从我看到别人这样做以来。通常甚至不显式地输入增量,而是计算它们。也就是说,而不是
执行:
使用单独的x和y变量时的可能替代方案:
一个二个一个一个
Ermahgerd,太令人沮丧了。实际上我在写这些的时候确实犯了几个错别字:-)
(Attempt This Online!测试)