0 calificaciones0% encontró este documento útil (0 votos)
580 vistas13 páginas
Juego de La Vida Python
Este documento describe el Juego de la Vida, un autómata celular creado por John Conway en 1970. El juego se desarrolla en una rejilla bidimensional infinita donde cada célula puede estar viva o muerta, y su estado depende de las reglas de supervivencia basadas en el número de vecinas vivas. El documento explica la historia, reglas y patrones básicos del juego, incluyendo patrones inmortales que permanecen estables indefinidamente.
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0 calificaciones0% encontró este documento útil (0 votos)
580 vistas13 páginas
Juego de La Vida Python
Este documento describe el Juego de la Vida, un autómata celular creado por John Conway en 1970. El juego se desarrolla en una rejilla bidimensional infinita donde cada célula puede estar viva o muerta, y su estado depende de las reglas de supervivencia basadas en el número de vecinas vivas. El documento explica la historia, reglas y patrones básicos del juego, incluyendo patrones inmortales que permanecen estables indefinidamente.
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13
EL JUEGO DE LA VIDA
[Inteligencia en redes de comunicaciones]
ABSTRACT por un matemtico de renombre, John Von
Newman quien intento crear una mquina Este trabajo se centra en el conocido hipottica que fuera capaz de construir copias de como Juego de la vida, su historia, si misma, cosa que consigui basndose en un funcionamiento y reglas, estudio de patrones y el modelo matemtico que se desarrollaba en uso de algoritmos para su optimizacin e tablero cuadriculado con una gran cantidad de implementacin. normas complejas, creando lo que pasara a denominarse desde entonces un autmata celular. El juego de la vida es el exitoso intento de John Horton Conway de simplificar las indeas de John 1. DEFINICIN von Newman.
El Juego de la vida es un autmata Diseado en 1970, fue mostrado al
celular, es decir, un modelo matemtico para un pblico por primera vez en Octubre de ese mismo sistema dinmico que evoluciona en pasos ao, a travs de un artculo publicado en la revista discretos, que se compone de una rejilla o Scientific American, en la columna Mathematical tablero extendida hasta el infinito Games de Martin Gadner atrayendo rpidamente (tericamente) en sus dos dimensiones que la atencin de la mayora debido a que a pesar de delimita unas celdas sobre las cual se van a su tremenda sencillez consegua, mediante la producir las interacciones. evolucin de los patrones dentro del juego desarrollar un motor muy potente, llegando Este juego puede ser encuadrado en la incluso a equivaler a una mquina universal de categora de los llamados "juegos de Turing, permitiendo la posibilidad de cualquier simulacin", denominacin que reciben por problema que sea computable algortmicamente, imitar procesos de la vida real. pueda procesarse mediante el juego de la vida. Es interesante observar como patrones muy complejos pueden surgir a partir de la 2. HISTORIA implementacin de unas reglas tan sencillas.
Otro de los factores que impulso el xito
Este juego fue diseado por el del juego de la vida era su similitud con algunos matemtico britnico John Horton Conway, de los procesos evolutivos que determinan el conocido por la mayora precisamente por su surgimiento, decadencia y alteraciones que teora de juegos combinatorios, aunque siendo experimentan las sociedades de seres vivos, tanto participe tambin en la teoras como la teora de a nuestro nivel como a nivel celular, y no slo eso nudos, teora de nmeros y teora de cdigos. ya que fsicos, matemticos, bilogos e incluso economistas y Conway estaba interesado en solventar un problema presentado en los aos cuarenta filsofos pudieron apreciar su potencial para asemejar de algn modo procesos en sus correspondientes campos, aunque sea a un nivel didctico en mayor medida.
3. REGLAS DE EL JUEGO
Este juego est basado en la evolucin de
estados sucesivos, en los cuales las condiciones del estado futuro dependen solamente de las Clula viva condiciones del estado anterior, por tanto no se Celda vaca requiere de la entrada de datos durante el desarrollo del mismo, y es tan slo el estado inicial y las normas del juego lo que determinada 1.1 Reglas originales: Leyes genticas el desarrollo del juego. Por tanto la participacin de Conway: en el mismo nicamente consiste en determinar las condiciones iniciales en funcin del resultado 1- Supervivencia: Cada individuo o clula que se quiera obtener en un nmero de turnos que cumpla el requisito de tener 2 3 vecinos concreto, o a perpetuidad. vivos sobrevive a la siguiente generacin (por tanto su estado se mantiene inalterado en el El juego se desarrolla en un tablero (el siguiente turno. mundo) infinito tericamente, y de unas dimensionas prefijadas en la prctica, 2- Fallecimiento: Una clula viva que tenga subdividido en forma de retcula mediante filas y menos de 2 vecinos fallece por aislamiento o columnas en celdas. Cada una de las celdas de la soledad en el siguiente estado o turno. Una clula retcula quedan por tanto rodeadas por otras ocho viva que tenga ms de trs vecinos vivos muere casillas que determinan su vecindad. por superpoblacin en el siguiente estado o turno. Estas celdas albergan lo que se 3- Nacimiento: Si una celda vaca pasa a denominan clulas que pueden encontrarse en tener en su vecindad exactamente 3 clulas vivas dos estados distintos, clula viva (podra su estado futuro en el siguiente turno ser el de considerarse un uno lgico) o clula muerta clula viva (nacimiento de nuevo individuo). (cero lgico) el estado de una clula en el futuro depender tanto de su estado actual como Segn se empieza a experimentar se del estado actual de sus clulas vecinas, encuentra que la poblacin empieza a siguiendo unas simples reglas establecidas. evolucionar cambios inslitos o inesperados, a Una clula al morir deja vaca la celda ojos del jugador estas reglas a veces crean la que ocupaba. sensacin de dar un resultado catico e impredecible. Como ya se ha comentado el jugador es por tanto quien determina las condiciones Normalmente segn estas reglas se puede iniciales de unas determinadas clulas, creando llegar a diversas situaciones final trascurrido un lo que se denomina poblacin inicial o nmero determinado de turnos: generacin cero. -Extincin: al cabo de un nmero finito de generaciones desaparecen todos los miembros de la poblacin o clulas vivas. - Estabilizacin: al cabo de un nmero finito de generaciones la poblacin queda estabilizada, 2.1 Inmortales. bien de forma rgida e inamovible, bien de forma oscilante entre dos o ms formas. Se trata de patrones continuos que debido a su configuracin estable permanecen -Crecimiento constante: la poblacin crece inalterados turno tras turno y generacin tras turno tras turno y se mantiene as un nmero generacin por s mismos, es decir siempre y infinito de generaciones. En un principio esta cuando no sean influenciados por la interaccin evolucin solo se contemplo de forma terica, con otros patrones crecientes. Cuando estos aunque ms tarde se encontrarn patrones que patrones inmortales se encuentran agrupados crecan de forma indefinida, durante un numero pueden clasificarse entre seudo-inmortales (no infinito de turnos. existe dependencia alguna entre los patrones para su futura supervivencia) y inmortales- estrictos Estas reglas se denominan leyes genticas de (patrones discontinuos en los cuales existe una Conway y se simbolizan como 2,3 / 3 dependencia entre ellos para su futura (condiciones de supervivencia / condiciones de supervivencia. Algunos de los patrones nacimiento) y fueron las reglas originales inmortales ms conocidos son: formuladas por John Horton Conway, sin embargo no son las nicas, ya que existen - El bloque (Block): es el patrn inmortal ms variaciones de stas. sencillo
2. PATRONES
Antes de seguir profundizando en el
juego es necesario definir lo que se denominan patrones bsicos. Los patrones bsicos no son ms que configuraciones de vecindades de clulas que determinan un comportamiento concreto con un nmero mnimo de clulas vivas en la estructura. Estos comportamientos pueden -El doble bloque (Bi-block): es el patrn pseudo- ser diversos: periodicidades y cambios ante entre inmortal ms simple: diversas formas, patrones que se desplazan por el tablero de juego, patrones que se duplican o crecen de forma indeterminada, etc. Algunos de estos patrones se generan conf facilidad de forma instantnea durante el desarrollo de juego y otros son interesantes por su comportamiento, pudiendo responder a leyes algebraicas, formndose incluso estructuras complejas que podran corresponderse con puertas lgicas -La colmena (Beehive): pueden encontrarse de AND, OR y NOT. forma aislada, pero lo mas comn esque aparezca de forma apareada o en grupos de cuatro, Estos patrones bsicos y sus formando el patron pseudo-inmortal llamado comportamientos han sido determinados o panal de miel (Honey farm). hallado por aficionados al juego en el cual vean un desafo de programacin, de hecho se extendi todo un movimiento en torno a este juego, que en ocasiones llegaba a tener connotaciones filosficas. Llegaron a crearse concursos de bsqueda de patrones interesantes, incluso el propio Conway ofreci un premio de 50 dlares para aquel que encontrara un patrn que creciera de forma indefinida. -El arpa (Harp): se trata del patrn inmortal estricto ms pequeo conocido, en el cual la modificacin de cualquiera de las islas provoca -La hogaza (Loaf): en ocasiones aparecen de la muerte del patrn. Su formacin casual es forma apareada y continua formando una doble muy improbable debido a que requiere una gran hogaza (Bi-loaf). El patrn seudo inmortal simetra en un determinado turno. formado por dos dobles hogazas se denomina panadera(bakery)
-Depredador (eater): se trata de un patrn
inmortal estricto llamado as por su capacidad de absorber objetos que golpeen contra el -El barco (Boat): puede aparecer en diversos bloque sin alterar su forma original tras ello. tamaos:
-El navo (Ship): variacin de el barco.
- Otros patrones inmortales: (de izquierda a derecha y de arriba abajo) la canoa (canoe), el carguero (carrier), signo de integrar (integral sign), la serpiente (snake), la charca (pond) y el mango (mango).
-El tubo (tube):
2.2 Astronaves -Nave ligera (Lightweight spaceship): Se desplaza a lo largo del tablero de forma Las astronaves (spaceships) son horizontal o vertical, a una velocidad de c/2. patrones que se caracterizan por desplazarse a travs del tablero a lo largo del tiempo, bien sea de forma diagonal (los ms comunes) o de forma horizontal o vertical. La velocidad de desplazamiento es variable, dependiendo del patrn que se trate. Se denomina mide en trminos de c y considera el numero de Evolucin: generaciones que necesita evolucionar un determinado patrn para desplazarse una celda [celdas/generaciones]. La mxima velocidad a la que se podra desplazarse uno de estos patrones seria la de una celda por generacin (de ah el uso de c como analoga de la velocidad de la luz). Por tanto la velocidad de una astronave se puede se denota como c/x y puede calcularse mediante el uso de esta Existen muchos otros patrones que se frmula: desplazan por el tablero, algunos de ellos muy grandes y complejos, formados por estructuras llamadas tagalong y pushalong. Un tagalong no es una astronave por si misma, si no que es un patrn que puede ser unido a la parte posterior de la nave y se ve arrastrado por ella, formando un patrn de astronave mayor. De Algunos de los patrones astronaves forma similar, un pushalong puede ser aadido ms comunes que suelen aparecer en el juego de a la parte delantera de una astronave para la vida son: aumentar su tamao.
-Deslizador (Glider): es el patrn astronave ms
pequeo que se conoce as como el ms comn. 2.3 Osciladores Se desplaza a lo largo del tablero de forma diagonal y tiene una velocidad de c/4. Un oscilador es un patrn que evoluciona cambiando de forma y que regresa a su forma original (y en su posicin original) despus de un nmero finito de generaciones. Se pueden clasificar segn su tamao, su inmunidad ante evoluciones externa, su periodo... Los ms comunes son los siguientes: Evolucin: -Parpadeador (Blinker): es el ms pequeo y comun de los osciladores. Su periodo es de 2 generaciones:
Como curiosidad, el deslizador ha sido
acuado por los hackers como emblema de su colectivo. - La baliza (Beacon): es otro oscilador muy rastro de escombros inmortales (locomotoras) e comn de periodo 2. incluso existen patrones de astronaves que durante su avance emiten otras astronaves de menor tamao (rastrillos) o dejan tras de si un rastro de pistolas (criaderos).
El ms conocido de estos patrones de
crecimiento indefinido, y el primero que se encontr, es el llamado la pistola de Gosper, -EL sapo (toad): de periodo 2. nombre que recibe de su descubridor Bill Gosper
-Plsar (Pulsar): es el oscilador ms frecuente Como su nombre indica se trata de un
de periodo igual a 3: patrn oscilador de periodo 20 de tipo pistola, que emite un deslizador por ciclo.
2.5 Otros patrones de inters
Adems de las ya comentados existen
infinidad de patrones con comportamientos diversos y sorprendentes, cabe destacar la Se han diseado patrones que oscilan en existencia de patrones reflectores, que tras casi cualquier periodo, exceptuando 19, 23, 31, recibir un impacto de una astronave generan otra 38, 41, 43, y 53, periodos para los cuales a pesar igual en una direccin distinta, volviendo tras de su posible existencia no se han encontrado ello a su estado inicial, los bloques deslizantes, poblaciones iniciales ni han observados. Otros que son inmortales de tipo bloque que se osciladores conocidos son la estrella, la cruz y el desplazan por el tablero en tras recibir el impacto beso (de periodo 3), el relog, el octgono y la de dos deslizadores de forma concreta hacia la fumarola (de periodo 4), la galaxia (periodo 8) y fuente de los planeadores y en direccin contraria el pentadecathlon (de periodo 15). tras recibir el impacto de tres deslizadores, etc.
2.4 Patrones de crecimiento
indefinido 3 ANALOGAS CON EL LGEBRA BOOLEANA. Los patrones de crecimiento indefinido se caracterizan, por aumentar la poblacin Como ya se ha comentado con generacin tras generacin, determinando un antelacin, tericamente el juego de la vida crecimiento infinito, contradiciendo las equivale a una mquina universal de Turing, por conjeturas iniciales de Conway. Algunos tanto podra usarse para realizar clculos simplemente crecen de forma de forma lineal o bolanos, y este es otro de los atractivos que exponencial a partir de patrones simples y presenta. As mediante el uso de algoritmos, y mnimos, otros simplemente son osciladores que aprovechando los comportamientos interesantes durante su periodo emiten astronaves de objetos al ser golpeados por deslizadores se (pistolas), o astronaves que tras de si dejan un han conseguido crear patrones que corresponden a puertas lgicas de deslizadores AND, OR y NOT, multiplicadores de astronaves, contadores Algunas versiones de el juego de la vida utilizan naturales, codificadores, generadores de algoritmos genticos que actan haciendo variar osciladores de frecuencia variable en funcin de las reglas del juego en determinadas clulas o una entrada de deslizadores, memorias no zonas del tablero que son elegidas de forma voltiles mediante el uso de bloques deslizantes aleatoria de tal modo que se produzcan (las diversas posiciones que sitan al bloque en mutaciones inesperadas en los patrones. Estas el tablero tras recibir impactos de planeadores versiones del juego guardan aun una mayor pueden usarse para codificar unos y ceros similitud con el desarrollo y cambios producidos lgicos) e incluso se ha usado el juego de la vida por ejemplo en los seres vivos y en sus para recrear el propio juego a una escala mucho sociedades, guardando las distancias y como mayor y respondiendo a una escala de tiempo analoga podra considerarse una versin mas ms lenta, todo esto basndose tan solo en fijar Darwiniana, en el cual, si una mutacin resulta un determinado estado inicial. beneficiosa contribuir a la supervivencia de el mismo durante un mayor nmero de generaciones. 4 PROGRAMACIN Y ALGORITMOS 4.1 Variaciones de el juego de la vida Como se puede deducir de sus reglas, el juego de la vida no implica de una programacin Respecto a la versin original que compleja para hacerlo funcional, simplemente se responde a las reglas denominadas 2,3/3 existen podra considerar que el juego se desarrolla en un variaciones que resultan en diversos array bidimensional (tpicamente son usados dos comportamientos. Algunos ejemplos de ello son: arrays: uno para la generacin actual y otro para calcular la generacin sucesora), tan slo hay que 5,1/3,4,6 "Larga vida": tener en cuenta algunas consideraciones como la comportamiento estable, casi todo son imposibilidad de disear un tablero infinito (al osciladores. tener que trabajar con una memoria finita, 2,3,5,6,7,8/3,6,7,8 Mancha de tinta: obviamente), por tanto nuestro tablero tendr crecimiento rpido que acaba unos limites definidos y el comportamiento de las estabilizndose. clulas al atravesarlos podr considerarse de /3 Sparks: patrones pequeos que diversas formas. La ms sencilla de ellas es aparecen y desaparecen rpidamente. considerar que todas las clulas que se encuentren 5,6,7,8/3,5,6,7,8 Diamantes fuera de esos lmites definidos pasan a catstrofes: comportamiento catico. considerarse formas clulas muertas. Otra opcin 1,3,5,7/1,3,5,7 Breeder: Crece algo sera definir esos vectores de forma cclica o rpidamente, todo son rplicas. toroidal, de tal forma que cuando el crecimiento 1,3,5,8/3,5,7 Amebas: de una poblacin atraviesa un lmite, sigue comportamiento catico. interactuando en el al aparecer por el lmite 2,4,5/3,6,8 Muerte: Surgen opuesto. Otras consideraciones que pueden tener comnmente locomotoras y naves. en cuenta son aquellas destinadas al ahorro de Estable recursos, por ejemplo si una clula no ha 3,4/3,4 "Vida 3,4": Crece. cambiado de estado respecto a la generacin anterior y tampoco lo ha hecho ninguna de sus vecinas podemos afirmar que tampoco cambiar 4.2 Algoritmos a largo plazo su estado en la generacin siguiente, por tanto obtenemos grandes zonas del tablero que no es La dificultad existe cuando se desea usar necesario actualizar sus valores. algoritmos que determinen como ha de ser la poblacin inicial para que trascurridas un numero determinado de generaciones podamos llegar a un determinado estado deseado, algo que a la simple vista de un operador humano no tiene que porque ser trivial y es ah donde es ms til la utilizacin de algoritmos, bien sean algoritmos paso a paso como con algoritmos a largo plazo. Entre stos ltimos destaca el un algoritmo conocido como Hashlife, destinado a la bsqueda de repeticiones y redundancias tanto espaciales como temporales en los autmatas celulares en funcin los parmetros que lo definen. Este algoritmo es altamente eficaz para el juego de la vida, ya que basa su funcionamiento en la bsqueda y comportamiento de patrones altamente regulares. Su funcionamiento se basa en el uso de tablas Hash, como su nombre ya sugiere. El uso de este tipo de tablas, (a pesar de resultar algo ms lentas en promedio que el uso de otro tipo de estructuras como pueden ser los rboles binarios, que guardan la informacin de una manera ms ordenada) consiguen optimizar los recursos al realizar de una manera eficiente las bsquedas, sobre todo cuando dichas tablas almacenan grandes cantidades de informacin. El algoritmo Hashlife desarrollado por Bill Gosper en la dcada de 1980 y hoy en da sigue siendo uno de los algoritmos ms populares tanto en el juego de la vida como en otros autmatas celulares. 4. CDIGO EN LENGUAJE PYTHON ? 001 #!/usr/bin/env python # -*- coding: utf-8 -*- 002 003 # --------------------------------------------------------------------- 004 # Programa: EL juego de la vida. 005 006 # Mdulos 007 from gasp import * 008 import time, os, random 009 010 # CONSTANTES 011 width = 640 012 height = 480 013 014 # Clases 015 # --------------------------------------------------------------------- 016 017 class Juego: 018 def __init__(self, opcion=1, archivo="mapa.txt", fil=10, col=10): 019 if opcion == 2: 020 self.mapa = leerMapa(archivo) 021 else: self.mapa = range(fil) 022 for i in range(fil): 023 self.mapa[i] = range(col) 024 025 for f in range(fil): 026 for c in range(col): 027 self.mapa[f]1 = random.randint(0, 1) 028 029 self.filas = len(self.mapa) 030 self.columnas = len(self.mapa[0]) 031 032 def __str__(self): 033 mapa = "" 034 for f in range(self.filas): 035 for c in range(self.columnas): 036 if self.mapa[f]1 == 0: 037 mapa += ". " 038 if self.mapa[f]1 == 1: 039 mapa += "* " mapa += "\n" 040 return mapa 041 042 def analizarVecinos(self, fil, col): 043 vecinos = 0 044 if fil-1 >= 0 and col-1 >= 0: 045 if self.mapa[fil-1][col-1] == 1: 046 vecinos += 1 047 if fil-1 >= 0: 048 if self.mapa[fil-1][col] == 1: 049 vecinos += 1 050 if fil-1 >= 0 and col+1 <= self.columnas-1: 051 if self.mapa[fil-1][col+1] == 1: 052 vecinos += 1 053 if col-1 >= 0: 054 if self.mapa[fil][col-1] == 1: 055 vecinos += 1 if col+1 <= self.columnas-1: 056 if self.mapa[fil][col+1] == 1: 057 vecinos += 1 058 if fil+1 <= self.filas-1 and col-1 >= 0: 059 if self.mapa[fil+1][col-1] == 1: 060 vecinos += 1 061 if fil+1 <= self.filas-1: 062 if self.mapa[fil+1][col] == 1: 063 vecinos += 1 064 if fil+1 <= self.filas-1 and col+1 <= self.columnas-1: 065 if self.mapa[fil+1][col+1] == 1: vecinos += 1 066 return vecinos 067 068 def ciclo(self): 069 nueva_conf = [] 070 for f in range(self.filas): 071 columna = [] 072 for c in range(self.columnas): 073 vecinos = self.analizarVecinos(f, c) 074 if self.mapa[f]1 == 0: 075 if vecinos == 3: 076 columna.append(1) 077 else: 078 columna.append(0) 079 if self.mapa[f]1 == 1: 080 if vecinos == 2 or vecinos == 3: 081 columna.append(1) else: 082 columna.append(0) 083 nueva_conf.append(columna) 084 085 self.mapa = nueva_conf 086 087 def dibujar(self): 088 dist_lv = width/self.columnas 089 dist_lh = height/self.filas 090 for i in range(self.columnas): 091 Line((dist_lv*i, 0), (dist_lv*i, height)) 092 for n in range(self.filas): 093 Line((0, dist_lh*n), (width, dist_lh*n)) 094 095 for f in range(self.filas): 096 y = height-dist_lh - ((dist_lh)*f)+(dist_lh/2) 097 for c in range(self.columnas): 098 x = ((dist_lv)*c)+(dist_lv/2) 099 if self.mapa[f]1 == 1: Circle((x, y), ((dist_lh/2)-((dist_lh/2)*0.2))) 100 101 # --------------------------------------------------------------------- 102 103 # Funciones 104 # --------------------------------------------------------------------- 105 106 # Quita el ultimo caracter de una lista. 107 def quitarUltimo(lista): 108 for i in range(len(lista)): 109 lista[i] = lista[i][:-1] 110 return lista 111 112 # Covierte una cadena en una lista. 113 def listarCadena(cadena): 114 lista = [] 115 for i in range(len(cadena)): 116 if cadena[i] == ".": 117 lista.append(0) 118 if cadena[i] == "*": lista.append(1) 119 return lista 120 121 # Lee un archivo de texto y lo convierte en una lista. 122 def leerMapa(archivo): 123 mapa = open(archivo, "r") 124 mapa = mapa.readlines() 125 mapa = quitarUltimo(mapa) 126 for i in range(len(mapa)): mapa[i] = listarCadena(mapa[i]) 127 return mapa 128 129 # --------------------------------------------------------------------- 130 131 def main(): 132 print "Indica si quieres cargar una configuracin o utilizar una aleatoria." 133 print "1. Aleatoria" 134 print "2. Cargar configuracin" 135 opcion = input("Introduce el nmero de la opcin elegida: ") 136 if opcion == 1: 137 filas = input("Introduce el nmero de filas: ") 138 columnas = input("Introduce el nmero de columnas: ") 139 archivo = "" 140 if opcion == 2: 141 archivo = raw_input("Intruduce la ruta del archivo: ") 142 filas = 0 143 columnas = 0 144 begin_graphics(width=width, height=height, title="Juego de la Vida") 145 juego = Juego(opcion=opcion, archivo=archivo, fil=filas, col=columnas) 146 while True: 147 juego.dibujar() 148 juego.ciclo() 149 time.sleep(0.35) 150 clear_screen() 151 update_when('next_tick') 152 end_graphics() 153 return 0 154 155 if __name__ == '__main__': 156 main()
6. REFERENCIAS
[1] Gadner.M. Scientific American (1970).
[2] Stephen A. Silver. The Life Lexicon: (http://www.argentum.freeserve.co.uk/life.htm)
[3] Descartes 2D: taller de matemticas: (http://descartes.cnice.mec.es/materiales_didacti