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--
-----------------------------------