sábado, 30 de octubre de 2010

Un autómata celular para generar números pseudo-aleatorios

La idea no es la primera vez que se oye, creo que fue Wolfram quién lo propuso en su momento, pero el concepto no deja de ser curioso, y el otro día trasteando con Golly me encontre con que una pequeña variante del juego de la vida de Conway, con la diferencia de que una "célula" también puede "nacer" si tiene 4 vecinos (y no solo 3) llamado "3-4 life", que hace que patrones sencillos crezcan indefinidamente quedando el contenido en su interior algo aleatorio, esta es una simulación de las 250 primeras generaciones [http://videobin.org/+2be/2ly.html].

Lo que intenta hacer el código es expandir la figura inicial estas 250 generaciones e introducir una "semilla de aleatoriedad", que puede ser un string cualquiera o se puede leer de un archivo, lo que hará que la figura crezca de forma distinta cada vez. Se deja además 1000 generaciones para que esta semilla se mezcle bien, y el resultado se utiliza para generar números pseudo-aleatorios, que no creo que sean criptográficamente.

Una peculiaridad es que el campo es de 40x40 (pero esto se puede cambiar) y toroidal, es decir, cuando la primera fila comprueba lo que tendría encima, se leen las de la última, y vieceversa, lo mismo pasa con  derecha e izquierda.

El código está aquí [autorand.tar.gz], solo hay que compilar autorand.c directamente.

Por defecto la "semilla de aleatoriedad" se lee desde el teclado, esto se puede cambiar al lanzar el comando:


./autorand [-fs <width> <heigh>] [-s <seed>] [-ss <seed source>] [-sz <seed size>] [-bs] [-st <field seed type>] [-mo <output length>] [-h]
-fs: Tamaño del campo (anchura/altura)
-s: Semilla de aleatoriedad
-ss: Fuente de la semilla
-sz: Tamaño de la semilla
-bs: La semilla se lee como un archivo binario no se detiene al encontrar saltos de línea
-st: Tipo de la semilla del campo (0 o 1)
-mo: Tamaño de la semilla


Eso es todo por hoy, mañana más... y dificilmente peor =D

No hay comentarios:

Publicar un comentario