Well sorry, works with use strict only by adding this line:
my(%h,$p,$q,@k,$k,$s);
without use strict it should run on any system (tested on AIX & NT)
$|=1;$"=0;for $"(1..100){for$|(1..21){$_.=chr(int(rand(26)+65));}$h{ +$_}=vp($_);$_=''} while (1) {@k=sort{$h{$b}<=>$h{$a}}keys %h;undef %h;for $"(1..5){pus +h @_,$k[int rand(70)+30]} splice @k,30;push @k,@_;undef @_;for $k(@k){$h{$k}=vp($k)}undef @k;@ +k=sort{$h{$b}<=>$h{$a}}keys %h; $_='';print"\r$k[0]"; exit if $h{$k[0]}==1;for $"(1..165){for $|(1.. +21){$_.=chr(int(rand(26)+65))} push @k,$_;$_=''}for $" (1..50){$p=$k[int rand(10)];$s=int rand(20); +push @k,substr($p,0,$s). chr(int(rand(26)+65)).substr($p,$s+1)}for $"(1..800){$p=$k[int rand( +25)];$q=$k[int rand(35)];$s=int rand(20); push @k,substr($p,0, $s).substr($q,$s),substr($q,0,$s).substr($p,$s) +}for $"(1..500){$p=$k[int rand(35)]; $q=$k[int rand(200)];$s=int rand(20);push @k,substr($p,0,$s).substr( +$q,$s),substr($q,0,$s).substr($p,$s)} for $k(@k){$h{$k}=vp($k)}undef @k} sub vp { $_ = shift; $b=0; $b++ if /J..................../; $b++ if /.U.................../; $b++ if /..S................../; $b++ if /...T................./; $b++ if /....A................/; $b++ if /.....N.............../; $b++ if /......O............../; $b++ if /.......T............./; $b++ if /........H............/; $b++ if /.........E.........../; $b++ if /..........R........../; $b++ if /...........P........./; $b++ if /............E......../; $b++ if /.............R......./; $b++ if /..............L....../; $b++ if /...............H...../; $b++ if /................A..../; $b++ if /.................C.../; $b++ if /..................K../; $b++ if /...................E./; $b++ if /....................R/; return $b/21; }
Have fun ....
----------------------------------- --the good, the bad and the physi-- -----------------------------------