Inventando el agua que moja

Para hacer funcionar el código, cree un nuevo documento de Flash ActionScript 3 y meta tres textfields con nombre de instancia status_txt, link_txt, y weasel_txt. Puede cambiar el texto objetivo (variable target) por cualquier otro que tenga letras de la A a la Z (mayúsculas), espacio, punto y signo de exclamación. Si quiere más letras tiene que modificar la funcion randomLetter().

El máximo número de generaciones que me ha generado para este texto es de 1452.

El código (AS3):

var target:String = "O TRUE APOTHECARY! THY DRUGS ARE QUICK. THUS WITH A KISS I DIE.";
var current:String = "";
var numSiblings:Number = 100;
var variation:Number = 5;
var stepsNeeded:Number = 0;
var generation:Array = [];
var timer:Timer = new Timer(10);

function newGeneration():Array {
	var i:Number;
	var thisGeneration:Array = [];
	for (i=0;i < numSiblings;++i) {
		thisGeneration.push(createSibling(current));
	}
	return thisGeneration;
}

function newParent():String {
	var i:Number, r:String = "";
	for (i=0;i < target.length;++i) {
		r += randomLetter();
	}
	return r;
}

function createSibling(dad:String):String {
	var i:Number;
	var sibling:String = "";
	for (i=0;i < dad.length;++i) {
		if (Math.random()*100<variation dad.charat="" else="" for="" function="" generation.length="" i:number="" if="" j:number="" maxq="0;" maxqindex="0;" n:number="Math.floor(Math.random()*28)+62;" qualification.length="" qualification.push="" qualification:array="[];" qualifygeneration="" r=" " r:string="" randomletter="" return="" sibling="" tempq="0;" tempq:number="0;" var="">maxQ) {
			maxQ = qualification[i];
			maxQIndex = i;
		}
	}
	return maxQIndex;
}

function parseGeneration(event:TimerEvent) {
	status_txt.htmlText = "GENERACIONES: " + stepsNeeded;
	generation = newGeneration();
	current = generation[qualifyGeneration()];
	weasel_txt.text = current;
	if (current == target) {
		timer.stop();
		status_txt.htmlText = "COMPLETADO LUEGO DE " + stepsNeeded + " GENERACIONES";
		link_txt.htmlText = "<a href="\"event:restart\"">OTRA VEZ</a>";
	} else {
		stepsNeeded++;
	}
}

function doClick (e:TextEvent) {
	if (e.text=="stop") {
		link_txt.htmlText = "<a href="\"event:continue\"">CONTINUAR</a>";
		timer.stop();
	} else if (e.text=="continue") {
		link_txt.htmlText = "<a href="\"event:stop\"">DETENER</a>";
		timer.start();
	} else if (e.text=="restart") {
		init();
	}
}

function init () {
	stepsNeeded = 0;
	current = newParent();
	timer.start();

	var style:StyleSheet = new StyleSheet();
	var link:Object = new Object();
	link.textDecoration = "underline";
	style.setStyle("a:hover", link);
	link_txt.styleSheet = style;
	link_txt.htmlText = "<a href="\"event:stop\"">DETENER</a>";
}

link_txt.addEventListener(TextEvent.LINK, doClick);
timer.addEventListener("timer",parseGeneration);

init();
</variation>