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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
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:
Pueden usar el algoritmo bien para estudiarlo o bien si se los solicitan en su colegio, escuela o universidad.
Saludos