在this PyCon talk的運用收益率,傑克Diederich顯示了這種「簡單」的實施Conway's Game of Life。我並不陌生,無論是GoL的或半高級Python,但代碼似乎很容易掌握,如果不是兩件事情:說明在這個遊戲中生命實現
- 採用
yield
。我之前已經看到使用yield來創建生成器,但是其中的八個是新的...它是否返回一個包含八個生成器的列表,或者這個工具是如何工作的? set(itertools.chain(*map(neighbors, board)))
。這位明星將結果列表(?)從申請鄰居的行爲解開,然後......我的大腦剛剛爆炸。
可能有人試圖解釋這兩個部分一個程序員使用的地圖,過濾器和減少被用於黑客一起一些Python代碼,但是這是不是一個每天都在使用Python? :-)
import itertools
def neighbors(point):
x, y = point
yield x + 1, y
yield x - 1, y
yield x, y + 1
yield x, y - 1
yield x + 1, y + 1
yield x + 1, y - 1
yield x - 1, y + 1
yield x - 1, y - 1
def advance(board):
newstate = set()
recalc = board | set(itertools.chain(*map(neighbors, board)))
for point in recalc:
count = sum((neigh in board) for neigh in neighbors(point))
if count == 3 or (count == 2 and point in board):
newstate.add(point)
return newstate
glider = set([(0,0), (1,0), (2, 0), (0,1), (1,2)])
for i in range(1000):
glider = advance(glider)
print glider