在学习编程 (Chris Pine) 中,有一个挑战是改进一段计算网格上连续图块的代码。如果瓷砖与网格边缘接壤,他给你的代码将失败——你需要解决这个问题。
关键是0
如果瓷砖是o
或者您正在检查的坐标不在网格上,则返回。
M = 'land'
o = 'water'
world = [[o,o,o,o,o,o,o,o,o,o,o],
[o,o,o,o,M,M,o,o,o,o,o],
[o,o,o,o,o,o,o,o,M,M,o],
[o,o,o,M,o,o,o,o,o,M,o],
[o,o,o,M,o,M,M,o,o,o,o],
[o,o,o,o,M,M,M,M,o,o,o],
[o,o,o,M,M,M,M,M,M,M,o],
[o,o,o,M,M,o,M,M,M,o,o],
[o,o,o,o,o,o,M,M,o,o,o],
[o,M,o,o,o,M,o,o,o,o,o],
[o,o,o,o,o,o,o,o,o,o,o]]
def continent_size world, x, y
if world[y][x] != 'land'
# Either it's water or we already
# counted it, but either way, we don't # want to count it now.
return 0
end
我已经以一种方式解决了这个问题,但我想知道为什么另一种方式不起作用。这是我的工作解决方案:
if y > world.length || x > world[y].length || world[y][x] != 'land'
return 0
end
这是我首先尝试的,但不起作用:
if world[y][x].nil?
return 0
elsif world[y][x] != 'land'
return 0
end
在 IRB 中,如果我查找一个不存在的坐标,如world[5][15]
返回值,nil
那么我期待world[y][x].nil?
工作,但我不明白为什么它不工作。
谢谢!