Algorithm-Search
view release on metacpan or search on metacpan
#!/usr/bin/perl
#Copyright 2008 Arthur S Goldstein
use Test::More tests => 9;
my $loaded = 1;
package fifteen;
sub new {return bless {}}
sub set_position {my $self = shift;
my $string = shift;
my @lines = split /\n/, $string;
my $row = 0;
foreach my $line (@lines) {
my @numbers = split /\s+/, $line;
$self->{board}->[$row] = \@numbers;
foreach my $count (0..$#numbers) {
if ($numbers[$count] == 0) {
$self->{zero_at} = [$row, $count];
}
}
$row++;
}
}
sub value {
my $self = shift;
my $value;
foreach my $row (@{$self->{board}}) {
$value .= join(' ', @$row)."\n";
}
$value .= "zero: ".$self->{zero_at}->[0].$self->{zero_at}->[1];
return $value;
}
sub move {
my $self = shift;
my $move = shift;
$self->{board}->[$self->{zero_at}->[0]]->[$self->{zero_at}->[1]] =
$self->{board}->[$move->[0]]->[$move->[1]];
$self->{board}->[$move->[0]]->[$move->[1]] = 0;
$self->{zero_at} = $move;
}
sub lock {
my $self = shift;
my $count = 1;
my $number_locked = 20000;
if ($self->{board}->[0]->[0] == 1) {
$self->{locked}->[0]->[0] = 1;
$number_locked = $number_locked - 100;
}
else {
for my $i (0..3) {
for my $j (0..3) {
if (($self->{board}->[$i]->[$j]) == 1) {
return $number_locked + $i + $j;
}
}
}
}
if ($self->{board}->[0]->[1] == 2) {
$self->{locked}->[0]->[1] = 1;
$number_locked = $number_locked - 100;
}
else {
for my $i (0..3) {
for my $j (0..3) {
if (($self->{board}->[$i]->[$j]) == 2) {
return $number_locked + $i;
}
( run in 0.680 second using v1.01-cache-2.11-cpan-e1769b4cff6 )