top of page

LOGO: programando la regla 30 y otras

  • 31 mar 2014
  • 2 Min. de lectura

Imagen

En una entrada reciente de Thehardmenpath, descubrí la regla 30 de Stephen Wolfram. Modificando el código Logo de el juego de la vida que habíamos publicado antes queda un sencillo código (que incluyo al final). En la imagen superior puede verse la salida de la regla 30. Otros patrones que se pueden formar son estos dos fractales:


Imagen

Imagen

El primero sale programando que la celda se dibuja si en la anterior hay solo una dibujada o bien las tres, y el segundo programando que solo haya una celda dibujada en la anterior.

El código para usar en UCBLogo es el siguiente:

; ; Juego wolfram ; raultecnologia ; http://raultecnologia.wordpress.com ; para empezar el juego teclea el procedimiento inicio ;

make “sizea 35 ;definimos una tabla de sizea filas y sizeb columnas make “sizeb 68 make “tablaactual (mdarray (list :sizea :sizeb) 1) make “medio sizeb/2

to inicio cs hideturtle setpensize 1 penup setxy -200 140 setpencolor 4 label “|Juego wolfram| make “tecla rc clearscreen setpencolor 7 comienzo end

to comienzo borraactual mdsetitem (list 2 :medio) :tablaactual 1 regla mostrar end

; procedimiento para poner a 0 la tabla actual to borraactual for [i 1 sizea 1] [for [j 1 sizeb 1] [mdsetitem (list :i :j) :tablaactual 0]] end

;procedimiento para mostrar la tablaactual

to mostrar make “posx -350 make “posy -240 penup for [i 1 sizea 1] [for [j 1 sizeb 1] [make “dentro mditem (list :i :j) :tablaactual ~ setxy posx posy if [dentro = 1][label “#] make “posx posx+12] make “posx -350 make “posy posy+12] end

; ;el procedimiento regla definimos condiciones aa bb cc etc y ahi es donde preparamos ;las diferentes reglas de wolfram ; to regla for [i 2 sizea-1 1] [for [j 2 sizeb-1 1] [aa bb]] end

to aa make “dentrox mditem (list :i-1 :j-1) :tablaactual make “dentroy mditem (list :i-1 :j) :tablaactual make “dentroz mditem (list :i-1 :j+1) :tablaactual if dentrox+dentroy+dentroz = 1 [mdsetitem (list :i :j) :tablaactual 1] end

to bb if [dentrox = 0] [if [dentroy = 1] [if dentroz = 1 [mdsetitem (list :i :j) :tablaactual 1]]] ;if dentrox+dentroy+dentroz = 3 [mdsetitem (list :i :j) :tablaactual 1] end

 
 
 

Comments


3025674909|

©2020 por SM-MANUFACTURING. Creada con Wix.com

bottom of page