7 my ($min_x, $min_y, $min_z) = (-1, -1, -1);
8 my ($max_x, $max_y, $max_z) = (0, 0, 1);
15 $is_active->{"$x,$y,0"} = 1
17 print "Active $x,$y,0\n";
28 my ($new_min_x, $new_min_y, $new_min_z) = ($max_x, $max_y, $max_z);
29 my ($new_max_x, $new_max_y, $new_max_z) = ($min_x, $min_y, $min_z);
30 print "iter $iter x=$min_x:$max_x, y=$min_y:$max_y, z=$min_z:$max_z\n";
31 for my $z ($min_z .. $max_z) {
32 for my $y ($min_y .. $max_y) {
33 for my $x ($min_x .. $max_x) {
34 # print "Trying $x,$y,$z\n";
37 [-1, -1, -1], [-1, -1, 0], [-1, -1, 1],
38 [-1, 0, -1 ], [-1, 0, 0], [-1, 0, 1],
39 [-1, 1, -1 ], [-1, 1, 0], [-1, 1, 1],
40 [0, -1, -1], [0, -1, 0], [0, -1, 1],
41 [0, 0, -1 ], [0, 0, 1],
42 [0, 1, -1 ], [0, 1, 0], [0, 1, 1],
43 [1, -1, -1], [1, -1, 0], [1, -1, 1],
44 [1, 0, -1 ], [1, 0, 0], [1, 0, 1],
45 [1, 1, -1 ], [1, 1, 0], [1, 1, 1],) {
46 my ($nx, $ny, $nz) = @$neigh;
47 $nx += $x; $ny += $y; $nz += $z;
48 $count++ if $is_active->{"$nx,$ny,$nz"};
50 # print "$count neighbours\n";
51 if (($is_active->{"$x,$y,$z"} && ($count == 2 || $count == 3))
52 || (!$is_active->{"$x,$y,$z"} && $count == 3)) {
53 $new_active->{"$x,$y,$z"} = 1;
54 # print "new active: $x, $y, $z\n";
55 $new_min_x = $x if $x < $new_min_x;
56 $new_min_y = $y if $y < $new_min_y;
57 $new_min_z = $z if $z < $new_min_z;
58 $new_max_x = $x if $x > $new_max_x;
59 $new_max_y = $y if $y > $new_max_y;
60 $new_max_z = $z if $z > $new_max_z;
63 $min_x = $new_min_x-1;
64 $min_y = $new_min_y-1;
65 $min_z = $new_min_z-1;
66 $max_x = $new_max_x+1;
67 $max_y = $new_max_y+1;
68 $max_z = $new_max_z+1;
70 $is_active = $new_active;
74 print "Acive: ", scalar keys %$is_active, "\n";