]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/perl | |
2 | use v5.14; | |
3 | use warnings; | |
4 | ||
5 | my @diffs = ( | |
6 | [-1, 0], | |
7 | [0 , 1], | |
8 | [1 , 0], | |
9 | [0 , -1], | |
10 | [-1, -1], | |
11 | [-1, 1], | |
12 | [1 , 1], | |
13 | [1 , -1], | |
14 | ); | |
15 | ||
16 | my @cpus; | |
17 | ||
18 | my @newstable; | |
19 | ||
20 | my $side = 4; # there are $side * $side CPUs | |
21 | ||
22 | for my $line (0 .. ($side - 1)) { | |
23 | $cpus[$line] = [ ($line * $side) .. (($line + 1) * $side - 1) ] | |
24 | } | |
25 | ||
26 | for my $cpu (0 .. ($side * $side - 1)) { | |
27 | my $x = $cpu / $side; | |
28 | my $y = $cpu % $side; | |
29 | for my $direction (0 .. $#diffs) { | |
30 | my $nx = ($x + $diffs[$direction][0] + $side) % $side; | |
31 | my $ny = ($y + $diffs[$direction][1] + $side) % $side; | |
32 | $newstable[$cpu][$direction] = $cpus[$nx][$ny]; | |
33 | } | |
34 | } | |
35 | ||
36 | for my $direction (0 .. $#diffs) { | |
37 | print "$direction: news_out = {"; | |
38 | printf 'news_in[%2d]', $newstable[$side * $side - 1][$direction]; | |
39 | my @lst = 0 .. ($side * $side - 2); | |
40 | for my $cpu (reverse @lst) { | |
41 | printf ', news_in[%2d]', $newstable[$cpu][$direction]; | |
42 | } | |
43 | say '};' | |
44 | } |