r
/
fifth
1
Fork 0

Added wrap-around return Bits in neighbor method

master
jrpotter 2015-05-31 17:48:48 -04:00
parent 0113ee34ae
commit e3843a7c58
1 changed files with 11 additions and 3 deletions

View File

@ -7,7 +7,8 @@ import itertools
class Neighborhood: class Neighborhood:
""" """
The following represents the cells that must be considered when applying a ruleset. The following represents the cells that must be considered when applying a ruleset, as well as the
values expected in a ruleset.
Since neighborhoods can be made arbitrarily complex, we allow extending in all directions. For example, Since neighborhoods can be made arbitrarily complex, we allow extending in all directions. For example,
the basic Moore neighborhood comprises of the 8 cells surrounding the center, but what if we wanted the basic Moore neighborhood comprises of the 8 cells surrounding the center, but what if we wanted
@ -69,7 +70,7 @@ class Neighborhood:
self.offsets = {} self.offsets = {}
def neighbors(self, bit, grid): def neighbors(self, bit, grid, wrap_around=True):
""" """
Returns all bits in the given neighborhood. Returns all bits in the given neighborhood.
@ -78,7 +79,14 @@ class Neighborhood:
""" """
bits = [] bits = []
for k in sorted(self.offsets.keys()): for k in sorted(self.offsets.keys()):
bits.append((k, self.offsets[k])) position = [sum(x) for x in zip(bit.index, k)]
for i in range(len(position)):
if wrap_around:
position[i] = position[i] % grid.shape[i]
elif i < 0 or i >= grid.shape[i]:
break
else:
bits.append(grid[tuple(position)])
return bits return bits