ayuda automata celular
Publicado por Eduardo (1 intervención) el 21/08/2015 15:47:10
Hola a todos, debo hacer una simulacion de automatas celulares, pero soy nuevo en cuanto a programacion en python. Me pasaron un codigo, pero hay un error que no puedo detectar.
Alguien podria ayudarme y explicarme porque las cadenas se van haciendo mas largas con cada interaccion?..al principio pense que el problema era en la parte de
asi que la comente, pero ocurre que las cadenas se hacen mas pequeñas.
Necesito que la variable nueva_cadena sea del mismo tamaño en todas las interacciones, agradezco si alguien pudiera comentarme mi error.
Alguien podria ayudarme y explicarme porque las cadenas se van haciendo mas largas con cada interaccion?..al principio pense que el problema era en la parte de
1
nueva_cadena=primer_celda+nueva_cadena+ultima_celda
asi que la comente, pero ocurre que las cadenas se hacen mas pequeñas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import sys
# Imprimir resultado con el formato establecido: 0=blanco, 1=*.
# Entrada: cadena
# Salida: cadena con formato establecido (anexa guiones al principio y al final)
def imprime_resultado(cadena):
resultado_formato = ''
for caracter in cadena:
if caracter == '1':
resultado_formato = resultado_formato + 'x'
else:
resultado_formato = resultado_formato + '-'
print (resultado_formato + "")
# Aplicar la regla con la ventana recibida.
# Entrada: Ventana (coleccion de tres celdas, la central y dos vecinos a los lados)
# Salida: 0 o 1, dependiendo de la regla utilizada
# Regla 165: Vecinos con el mismo color=1, de otra manera=0
def procesa_ventana(ventana):
if ventana[0] == ventana[2]:
resultado = '1'
else:
resultado = '0'
return resultado
# Generar una nueva cadena de acuerdo a una regla (0-255)
# Entrada: cadena actual (t=i)
# Salida: cadena nueva (t=i+1)
def recorre_cadena(cadena):
nueva_cadena = ''
for i in range(0,len(cadena)-2): #Es como un for(i=0;i<cadena.length;i++) en Java
n = len(cadena)
ventana = cadena[i:i+3]
nueva_cadena = nueva_cadena+str(procesa_ventana(ventana))
ultima_ventana = cadena[len(cadena)-2]+cadena[len(cadena)-1]+cadena[0]
primera_ventana = cadena[len(cadena)-1]+cadena[0]+cadena[1]
ultima_celda = str(procesa_ventana(ultima_ventana))
primer_celda = str(procesa_ventana(primera_ventana))
nueva_cadena = primer_celda+nueva_cadena+ultima_celda;
return nueva_cadena
#-------------------------------------------------------------
# Main (parte principal del programa)
# Cadenas de prueba
#mi_cadena = "0000000000000000000000000000000000100000000000000000000000000000000000"
#mi_cadena="0010101110"
mi_cadena="01010111"
# Toma la cantidad de iteraciones como argumento de la linea de comando
iteraciones = 3 #sys.argv[1]
# Por la cantidad fijada de iteraciones:
# Imprime la cadena actual
# Genera una nueva cadena de acuerdo a la regla
# Reemplaza la cadena actual por esta nueva cadena
for i in range(0,int(iteraciones)):
imprime_resultado(mi_cadena)
nueva_cadena = recorre_cadena(mi_cadena)
mi_cadena = nueva_cadena
Necesito que la variable nueva_cadena sea del mismo tamaño en todas las interacciones, agradezco si alguien pudiera comentarme mi error.
Valora esta pregunta


0