#!/usr/local/bin/perl -w

$|=1;
$X[0]=-2; $Y[0]=-1;
$X[1]=-2; $Y[1]=+1;
$X[2]=+2; $Y[2]=-1;
$X[3]=+2; $Y[3]=+1;
$X[4]=-1; $Y[4]=-2;
$X[5]=-1; $Y[5]=+2;
$X[6]=+1; $Y[6]=-2;
$X[7]=+1; $Y[7]=+2;

for (;;){
top:
    @log=();
    @a=();
    for $i (1..8){
         for $j (1..8){
              $a[$i][$j]=0;
         }
    }
    $a[1][1]=1;
    $counter=1;
    $xx=$yy=1;
    push @log, "$xx - $yy";
loop:
    $n = int rand(8);
try:
    $cx = $xx+$X[$n];
    $cy = $yy+$Y[$n];
    $ok=1;
    if ($cx<=0 || $cy<=0) { $ok=0; }
    elsif (!defined $a[$cx][$cy]){ $ok=0; }
    elsif ($a[$cx][$cy]==1){ $ok=0; }
    if ($ok==0){
	$c++;
	if ($c>=8){
	    if ($c>=25){
		goto top;
	    }
	    $n = ++$n % 8;
	    goto try;
	}
	goto loop;
    }
    $c=0;
    $counter++;
    $xx=$cx;
    $yy=$cy;
    $a[$xx][$yy]=1;
    push @log, "$xx - $yy";
    if ($counter==64){
	print ".\a";
	open OUT, ">>".$0.".out" or die "Cannot open: $!";
	for (@log){
	    print OUT $_, "\n";
	}
	print OUT "-" x 40, "\n";
	close OUT;
	goto top;
    }
    goto loop;
}

__END__

