#!/usr/bin/perl # - automatically generated from by: # alpaca.pl v0.93 # http://catseye.webhop.net/projects/alpaca/ ###################################################### use Alpaca qw(true false guess adjacent_state adjacent_class load_playfield display_playfield process_playfield); sub StarterClassRules { return 0 }; sub SustainerClassRules { return 0 }; sub SassyClassRules { return 0 }; sub SolutionClassRules { return 0 }; sub SpaceStateRules { return 'Space' }; sub WallStateRules { return 'Wall' }; sub SlimeStateRules { return 'Space' if ((not ((SustainerClassMember($Playfield->[$x][$y-1]) and SustainerClassMember($Playfield->[$x+1][$y])) or (SustainerClassMember($Playfield->[$x][$y-1]) and SustainerClassMember($Playfield->[$x][$y+1])) or (SustainerClassMember($Playfield->[$x][$y-1]) and SustainerClassMember($Playfield->[$x-1][$y])) or (SustainerClassMember($Playfield->[$x+1][$y]) and SustainerClassMember($Playfield->[$x][$y+1])) or (SustainerClassMember($Playfield->[$x+1][$y]) and SustainerClassMember($Playfield->[$x-1][$y])) or (SustainerClassMember($Playfield->[$x][$y+1]) and SustainerClassMember($Playfield->[$x-1][$y])))) or (($Playfield->[$x][$y-1] eq 'Head' and $Playfield->[$x+1][$y] eq 'Head') or ($Playfield->[$x][$y-1] eq 'Head' and $Playfield->[$x][$y+1] eq 'Head') or ($Playfield->[$x][$y-1] eq 'Head' and $Playfield->[$x-1][$y] eq 'Head') or ($Playfield->[$x+1][$y] eq 'Head' and $Playfield->[$x][$y+1] eq 'Head') or ($Playfield->[$x+1][$y] eq 'Head' and $Playfield->[$x-1][$y] eq 'Head') or ($Playfield->[$x][$y+1] eq 'Head' and $Playfield->[$x-1][$y] eq 'Head'))); return 'Head' if ((StarterClassMember($Playfield->[$x][$y+1]) or StarterClassMember($Playfield->[$x][$y-1]) or StarterClassMember($Playfield->[$x+1][$y]) or StarterClassMember($Playfield->[$x-1][$y]))); return SustainerClassRules() || 'Slime' }; sub HeadStateRules { return 'Body' if (1); return StarterClassRules() || SustainerClassRules() || SassyClassRules() || 'Head' }; sub BodyStateRules { return 'Solved' if ((SolutionClassMember($Playfield->[$x][$y+1]) or SolutionClassMember($Playfield->[$x][$y-1]) or SolutionClassMember($Playfield->[$x+1][$y]) or SolutionClassMember($Playfield->[$x-1][$y]))); return 'Space' if ((not ((SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x+1][$y])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x][$y+1]) and SassyClassMember($Playfield->[$x-1][$y]))))); return StarterClassRules() || SassyClassRules() || 'Body' }; sub SolvedStateRules { return 'Space' if ((not ((SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x+1][$y])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x][$y-1]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x][$y+1])) or (SassyClassMember($Playfield->[$x+1][$y]) and SassyClassMember($Playfield->[$x-1][$y])) or (SassyClassMember($Playfield->[$x][$y+1]) and SassyClassMember($Playfield->[$x-1][$y]))))); return SassyClassRules() || SolutionClassRules() || 'Solved' }; sub StartStateRules { return StarterClassRules() || SustainerClassRules() || SassyClassRules() || 'Start' }; sub FinishStateRules { return SustainerClassRules() || SassyClassRules() || SolutionClassRules() || 'Finish' }; sub SassyClassMember { return $_[0] eq 'Head' || $_[0] eq 'Body' || $_[0] eq 'Solved' || $_[0] eq 'Start' || $_[0] eq 'Finish' || 0 }; sub SolutionClassMember { return $_[0] eq 'Solved' || $_[0] eq 'Finish' || 0 }; sub StarterClassMember { return $_[0] eq 'Head' || $_[0] eq 'Body' || $_[0] eq 'Start' || 0 }; sub SustainerClassMember { return $_[0] eq 'Slime' || $_[0] eq 'Head' || $_[0] eq 'Start' || $_[0] eq 'Finish' || 0 }; $Appearance = { 'Body' => '?', 'Finish' => 'F', 'Head' => '-', 'Slime' => '%', 'Solved' => '@', 'Space' => ' ', 'Start' => 'S', 'Wall' => '#', }; $InputCodec = { '?' => 'Body', 'F' => 'Finish', '-' => 'Head', '%' => 'Slime', '@' => 'Solved', ' ' => 'Space', 'S' => 'Start', '#' => 'Wall', }; $StateRule = { 'Body' => \&main::BodyStateRules, 'Finish' => \&main::FinishStateRules, 'Head' => \&main::HeadStateRules, 'Slime' => \&main::SlimeStateRules, 'Solved' => \&main::SolvedStateRules, 'Space' => \&main::SpaceStateRules, 'Start' => \&main::StartStateRules, 'Wall' => \&main::WallStateRules, }; load_playfield($ARGV[0]); display_playfield(); while (!$done) { process_playfield(); display_playfield(); } exit(0); ### END ###