un Glider del juego de la vida, a 10 iteraciones sobre una rejilla de 6x6 con frontera abierta...
Felicidades programadores!
glider = [[0, 0, 1, 0, 0, 0], [1, 0, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0] ] def printg(grid): """ Imprime un arreglo bidimensional. Cambia los 0's por puntos '.' para mayor claridad. """ for i in range(len(grid)): row = "" for j in range(len(grid[i])): row += str(grid[i][j]) if grid[i][j] == 1 else '.' print row def vecindad ((y,x), grid): """ Vecindad de VonNeumann de una celda dada en la rejilla. Se asume un automata celular de frontera 'fria' (o abierta, es decir rodeada de 0's). """ try: val = grid[y][x] vec = [[0 for j in range(0,3)] for i in range(0,3)] for i in range(-1,2): for j in range(-1,2): # si la casilla vecina esta dentro de la rejilla, la # toma. Si no, asume un 0 vec[i+1][j+1] = grid[y+i][x+j] if (y+i,x+j) >= (0,0) and y+i < len(grid) and x+j < len(grid[y+i]) else 0 except Exception as e: return None return vec def lifegame(grid): """ Juego de la vida. Toma por cada casilla su vecindad de VonNeumann y evalua la cantidad de vecinos vivos de ella. -Si esta viva y tiene 2 o 3 vecinos vivos, queda viva -De lo contrario muere -Si esta muerta y tiene exactamente 3 vecinos vivos, vive """ # arreglo de 0's sobre el que se calculara siguiente iteracion temp = [[0 for j in range(len(glider[i]))] for i in range(len(glider))] # recorre cada casilla de la rejilla y toma su vecindad, aplicando # despues reglas del juego for i in range(len(glider)): for j in range(len(glider[i])): centro = glider[i][j] vec = vecindad((i,j), glider) if vec == None: return None # cuenta cantidad de vecinos vivos de la casilla vecinos_vivos = 0 for vi in range(len(vec)): for vj in range(len(vec)): if (vi,vj) != (1,1) and vec[vi][vj] == 1: vecinos_vivos += 1 # aplica reglas del juego de la vida if centro == 1: if vecinos_vivos == 2 or vecinos_vivos == 3: temp[i][j] = 1 else: temp[i][j] = 0 else: if vecinos_vivos == 3: temp[i][j] = 1 return temp #### MAIN #### printg(glider) for c in range(10): glider = lifegame(glider) if glider == None: print "Error!!!" break print "" printg(glider)
--- Eru kaluva tielyanna (Dios iluminará tu camino) "Ama y haz lo que quieras. Si callas, callarás con amor; si gritas, gritarás con amor; si corriges, corregirás con amor; si perdonas, perdonarás con amor. Si tienes el amor arraigado en ti, ninguna otra cosa sino amor serán tus frutos." (San Agustín) Solamente asegúrate que en realidad sea AMOR...
No hay comentarios.:
Publicar un comentario