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[H\033[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