Algorithm-Search

 view release on metacpan or  search on metacpan

t/p28.t  view on Meta::CPAN

#!/usr/bin/perl
#Copyright 2008 Arthur S Goldstein
#Games Magazine, July 2008 page 28
use Test::More tests => 22;

  package pearls_of_wisdom;

#our $xx = 0;
  sub new {my $self = {moves => 1, row => 0, column => 0};
   $self->{value}->[0]->[0] = 1; return bless $self}
  sub set_rules {
    my $self = shift;
    my $parameters = shift;
    $self->{max_row} = $parameters->{max_row};
    $self->{max_column} = $parameters->{max_column};
    $self->{in_moves} = $parameters->{in_moves};
    $self->{fixed_value} = $parameters->{fixed_value};
  }

  sub move {
    my $self = shift;
    my $move = shift;

#$xx++;
#print STDERR "Considering move $move, current row ".$self->{row};
#print STDERR " current column ".$self->{column};
#print STDERR " $xx move number ".$self->{moves};
#print STDERR "\n";
    if ($move eq 'U') {
#print STDERR "considering U move\n";
      if ($self->{row} == 0) { return}
      else {
        $self->{value}->[$self->{row}]->[$self->{column}] .= 'U';
        $self->{row}--;
      };
    }
    elsif ($move eq 'D') {
      if ($self->{row} == $self->{max_row}) { return}
      else {
        $self->{value}->[$self->{row}]->[$self->{column}] .= 'D';
        $self->{row}++
      };
    }
    elsif ($move eq 'L') {
      if ($self->{column} == 0) { return}
      else {
        $self->{value}->[$self->{row}]->[$self->{column}] .= 'L';
        $self->{column}--;
      };
    }
    elsif ($move eq 'R') {
      if ($self->{column} == $self->{max_column}) { return}
      else {
        $self->{value}->[$self->{row}]->[$self->{column}] .= 'R';
        $self->{column}++
      };
    }
#print STDERR "did not max out move\n";

    if (defined $self->{in_moves}->[$self->{row}]->[$self->{column}]) {
      $self->{out_moves}->[$self->{row}]->[$self->{column}] =
       $self->{in_moves}->[$self->{row}]->[$self->{column}]->{$move} || [];
#print STDERR "set moves out ".join("..",@{$self->{out_moves}->[$self->{row}]->[$self->{column}]})."\n";
    }

    if (defined $self->{value}->[$self->{row}]->[$self->{column}]) {
      return
    }

    my $value = ($self->{moves} + 1) %3;



( run in 0.690 second using v1.01-cache-2.11-cpan-e1769b4cff6 )