Skip to content

Instantly share code, notes, and snippets.

@colomon
Created September 1, 2010 02:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save colomon/560146 to your computer and use it in GitHub Desktop.
Save colomon/560146 to your computer and use it in GitHub Desktop.
my $target = "METHINKS IT IS LIKE A WEASEL";
my @chars = 'A'..'Z',' ';
my $mutate-chance = 8; # percent
my $C = 100;
my $parent = @chars.pick($target.chars, :replace).join;
my $iter = 0;
say "#{ $iter++ }: $parent { fitness $parent }";
while $parent ne $target {
$parent = ($parent, (^$C).map({ mutate $parent })).max({ fitness $_ });
say "#{ $iter++ }: $parent { fitness $parent }";
}
sub mutate($str) {
$str.comb.map({ 100.rand < $mutate-chance ?? @chars.pick !! $_ }).join;
}
sub fitness($str) {
[+] $str.comb Zeq $target.comb;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment