chiark / gitweb /
Automate existing automatic steps with Makefile
[bedbugs.git] / src / mungetable.pl
1 #! /usr/bin/perl -w
2 # Hack to munge life.table for bedbugs.
3
4 my %vars = ();
5 my $done_vars = 0;
6
7 while(<>) {
8     if (m/^#/) {
9         print $_;
10     } elsif (m/^(n_states|neighborhood|symmetries):/) {
11         print $_;
12     } elsif (m/^var /) {
13         die "Complicated variable" unless m/^var (.)=\{0,1\}$/;
14         $vars{$1} = 1;
15     } else {
16         chomp;
17         my @cells = split /,/;
18         my %myvars = ();
19         die "Unexpected number of comma-separated items" unless @cells == 10;
20         my @dirs = qw/c n ne e se s sw w nw/;
21         if (!$done_vars) {
22             print "var zz={0," . join(",", 2..17) . "}\n";
23             print "var aa={" . join(",", 18..33) . "}\n";
24             foreach my $d (@dirs) {
25                 print "var z$d={zz}\n";
26                 print "var a$d={aa}\n";
27                 print "var q$d={z$d,a$d}\n";
28             }
29             $done_vars = 1;
30         }
31         my $i = 0;
32         while (my $dir = pop @dirs) {
33             die "Duplicate var" if exists($myvars{$cells[$i]});
34             if (exists($vars{$cells[$i]})) {
35                 $myvars{$cells[$i]} = 1;
36                 $cells[$i] = "q".$dir;
37             } elsif ($cells[$i] eq "0") {
38                 $cells[$i] = "z".$dir;
39             } elsif ($cells[$i] eq "1") {
40                 $cells[$i] = "a".$dir;
41             } else {
42                 die "Unexpected cell $cells[$i]";
43             }
44             $i++;
45         }
46         print join(",", @cells), "\n";
47     }
48 }