Regla 110 Autómata Celular en Python


En esta ocasión les traigo un código que desarrolle en el 2013, para la clase de graficacion en la universidad, se trata de un algoritmo para la llamada regla 110 de autómatas celulares, el código esta hecho en Python.

El algoritmo es el siguiente:


# powered by evilnapsis
# website http://evilnapsis.com
def convert(d):
if(d=="000"): r = '0';
elif(d=="001"): r = '1';
elif(d=="010"): r = '1';
elif(d=="011"): r = '1';
elif(d=="100"): r = '0';
elif(d=="101"): r = '1';
elif(d=="110"): r = '1';
elif(d=="111"): r = '0';
return r;
#print convert("001")
#cad = "101011100101000"
cad = raw_input("input >> ")
ran = raw_input("range >> ")
t =len(cad)
index = t-1
print "longitud : ",t
r = ""
for j in range(int(ran)):
aux1 = index # este debe ser longitud -1 , al iniciar
aux2 = index -index # este debe ser 0 al iniciar
aux3 = index – (index-1) # este debe ser 1 al iniciar
cnt = 1
r=""
for i in range(t):
if aux3==t:
aux3=0
l = cad[aux1]
m = cad[aux2]
n = cad[aux3]
n1 = l+m+n
if cnt==1:
aux1 = 0
aux2 = 1
aux3 = 2
else :
aux1 = aux1 +1
aux2 = aux2 +1
aux3 = aux3 +1
cnt = cnt+1
r += convert(n1)
cad = r
print r

view raw

r110.py

hosted with ❤ by GitHub

El algoritmo toma como entrada 2 valores, el input el cual es una cadena compuesta de ceros y unos por ejemplo (101010101010010101001010) y el rango que es un numero entero.

El algoritmo consiste en recorrer la cadena de entrada en grupos de 3 desde el inicio hasta el final y en cada ciclo se genera una nueva entrada para una nueva cadena, el ciclo se repite el numero de veces indicado en el rango.

Como decía el algoritmo toma 3 valores de la cadena y los transforma en 1 solo caracter cero o uno, en base a la siguiente tabla:

patron 111 110 101 100 011 010 001 000
nuevo estado 0 1 1 0 1 1 1 0

Resultado

El resultado del algoritmo son construcciones triangulares y/o fractales:

r110

Pueden usar el algoritmo bien para estudiarlo o bien si se los solicitan en su colegio, escuela o universidad.

Saludos

Leave a comment