you shortened it, but you broke it too... ;-)

Wu Xi news at luegenpresse.edu
Sun Dec 31 20:15:00 EST 2017


import time , itertools
__doc__=" Mr Conway_s Game Of Life simulation in python 2 and 3 "
width = 100 ; height = 50 # size of life habitat , e.g. a simulated meteorite, bolide , etc.
vmap = [['D' for w in range(width)] for h in range(height)] # D = Dead at first
def neighbours(point):
 x,y = point
 
 yield x + 1 , y
 yield x - 1 , y
 yield x , y + 1
 yield x , y - 1 # this is proof that life can emerge inside of computers and cellular automatons,
 
 yield x + 1 , y + 1 # and evolve through memory, attack other cells and morph into toads, pulsars, etc..
 yield x + 1 , y - 1
 yield x - 1 , y + 1 # spray your memory with space alien patterns and life evolution will start in your machine !
 yield x - 1 , y - 1
 
 '''
 for i in range(-1, 2) :
 for j in range(-1, 2) :
 if i != j :
 yield x + i, y + j
 '''
 # yield from [(x+i, x+j) for i in [-1,1] for j in [-1,1]]
 
 
 
 
 
 
def ageing(habitat):
 newstate = set()
 recalc = habitat | set(itertools.chain(*map(neighbours, habitat)))
 for point in recalc:
 count = sum((neigh in habitat) for neigh in neighbours( point))
 if count == 3 or (count == 2 and point in habitat): # standard rule def. - a life cell having less than 2 alive neighbours will die
 newstate.add(point)
 return newstate
glider = set([ (40,40) , (41,40) , (42,40) , (40,41) , (41,42) ]) # patterns of life: gliders, boats, guns, imps, toads, pulsars and so on
previous = set([ ( 0, 0) , ( 1, 0) , ( 2, 0) , ( 0, 1) , ( 1, 2) ]) # offset on screen / place during last step in life
for lifetime in range(300): # number of simulated lifetime steps (e.g. 300 / 0.1 sleep = 30 seconds) before death occurs
 try:
 time.sleep( 0.1 ) # slow it down
 previous = glider ; glider = ageing(glider)
 for tup in glider : 
 el=tup ; xx=el[0] % width ; yy =el[1] % height ; vmap[xx][yy]='L' # Live cell has emerged
 for tup in previous : 
 el=tup ; xx=el[0] % width ; yy =el[1] % height 
 if tup not in glider : vmap[xx][yy]='D' # Dead cell 
 # put more life patterns in this lifespan loop and let them evolutionize!
 vtxt = [''.join('*' if cell=='L' else ' ' for cell in row) for row in vmap] 
 print('033円[H033円[J') # clear screen
 print('\n'.join(reversed(vtxt))) 
 except: pass
print("Simulated lifetime of the glider is over. May there live soon a new glider in the life habitat of your screen.") 


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /