I am trying to understand how the following code knows not to count a
tile that has been previously counted, its an example from Chris P.'s
Learn to Program from Pragmatic Bookshelf. I understand how the first
size = size + … recursively starts counting, but for example when you
go to the next size = … how is the possible overlap accounted for?
Thanks!
jlc
These are just to make the map
easier for me to read. “M” is
visually more dense than “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
So first we count this tile…
size = 1
world[y][x] = ’ counted land’
…then we count all of the
neighboring eight tiles (and,
of course, their neighbors by
way of the recursion).
size = size + continent_size(world, x-1, y-1)
size = size + continent_size(world, x , y-1)
size = size + continent_size(world, x+1, y-1)
size = size + continent_size(world, x-1, y )
size = size + continent_size(world, x+1, y )
size = size + continent_size(world, x-1, y+1)
size = size + continent_size(world, x , y+1)
size = size + continent_size(world, x+1, y+1)
size
end