Script playSol.pl

#!/usr/bin/perl

$solFile = "solutions";
@cases;
@sym = ("X", "O", "O");
$hole;
$solution = 0;

open IN, $solFile;
while (<IN>) {
    $solution++;
    chomp;
    @coups = split("-");
    pop @coups;
    &playSeq(@coups);
}
close IN;

sub playSeq {
    my @moves = @_;
    &reset();
    foreach $move ( @moves ) {
	&moveHole($move);
	system("clear");
	print qq/Solution $solution \n/;
	print qq/(/.scalar(@moves).qq/ coups)\n\n/;
	&display();
	sleep(1);
    }
}

sub moveHole {
    $dest = shift;
    $cases[$hole] = $cases[$dest];
    $cases[$dest] = 0;
    $hole = $dest;
}

sub reset {
    @cases = (1, 1, 1, 1, 1, 1, 1, 1, 0, 
	      2, 2, 2, 2, 2, 2, 2, 2);
    $hole = 8;
}

sub display {
  print qq/       $sym[$cases[2]]       $sym[$cases[10]]\n/;
  print "  ";
  for ($k=1; $k<17; $k+=4) { print qq/   $sym[$cases[$k]]/; }
  print "\n";
  for ($k=0; $k<17; $k+=4) { print qq/   $sym[$cases[$k]]/; }
  print "\n  ";
  for ($k=3; $k<17; $k+=4) { print qq/   $sym[$cases[$k]]/; }
  print "\n";
  print qq/       $sym[$cases[6]]       $sym[$cases[14]]\n\n/;
}