File: RuleTreeGen.pl

package info (click to toggle)
golly 2.1-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 9,560 kB
  • ctags: 5,064
  • sloc: cpp: 38,119; python: 3,203; perl: 1,121; makefile: 58; java: 49; sh: 22
file content (40 lines) | stat: -rw-r--r-- 1,047 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Set the states, neighbors, and function here.
my $numStates = 2 ;
my $numNeighbors = 8 ;
# order for nine neighbors is nw, ne, sw, se, n, w, e, s, c
# order for five neighbors is n, w, e, s, c
sub f {
   my ($nw, $ne, $sw, $se, $n, $w, $e, $s, $c) = @_ ;
   my $sum = $nw + $ne + $sw + $se + $n + $w + $e + $s ;
   return ($sum == 3 || ($sum == 2 && $c)) ? 1 : 0 ;
}
my $numParams = $numNeighbors + 1 ;
my %world ;
my $nodeseq = 0 ;
my @r ;
my @params = (0) x $numParams ;
sub getNode {
   my $n = shift ;
   return $world{$n} if defined($world{$n}) ;
   $world{$n} = $nodeseq ;
   push @r, $n ;
   return $nodeseq++ ;
}
sub recur {
   my $at = shift ;
   if ($at == 0) {
      return f(@params) ;
   } else {
      my $n = $at ;
      for (my $i=0; $i<$numStates; $i++) {
         $params[$numParams-$at] = $i ;
         $n .= " " . recur($at-1) ;
      }
      return getNode($n) ;
   }
}
recur($numParams) ;
print "num_states=$numStates\n" ;
print "num_neighbors=$numNeighbors\n" ;
print "num_nodes=", scalar @r, "\n" ;
print "$_\n" for @r ;