sub tick { my \$self = shift; my \$cells = \$self->{Cells}; my ( \$k1, \$k2, \$k3, \$k4, \$k5, \$k6, \$k7, \$k8, \$x0, \$x1, \$x2, \$y0, \$y1, \$y2 ); my %newcells; @newcells{map { ( \$x0, \$y0 ) = unpack 'i2', \$_; ( \$x1, \$x2, \$y1, \$y2 ) = ( \$x0 - 1, \$x0 + 1, \$y0 - 1, \$y0 + 1 ); my @zcells = ( (\$k1 = pack 'i2', \$x1, \$y1) x !exists(\$cells->{\$k1}), (\$k2 = pack 'i2', \$x1, \$y0) x !exists(\$cells->{\$k2}), (\$k3 = pack 'i2', \$x1, \$y2) x !exists(\$cells->{\$k3}), (\$k4 = pack 'i2', \$x0, \$y1) x !exists(\$cells->{\$k4}), (\$k5 = pack 'i2', \$x0, \$y2) x !exists(\$cells->{\$k5}), (\$k6 = pack 'i2', \$x2, \$y1) x !exists(\$cells->{\$k6}), (\$k7 = pack 'i2', \$x2, \$y0) x !exists(\$cells->{\$k7}), (\$k8 = pack 'i2', \$x2, \$y2) x !exists(\$cells->{\$k8}) ); (\$_) x (@zcells == 5 || @zcells == 6), map { ( \$x0, \$y0 ) = unpack 'i2', \$_; ( \$x1, \$x2, \$y1, \$y2 ) = ( \$x0 - 1, \$x0 + 1, \$y0 - 1, \$y0 + 1 ); (\$_) x ( exists(\$cells->{pack 'i2', \$x1, \$y1}) + exists(\$cells->{pack 'i2', \$x1, \$y0}) + exists(\$cells->{pack 'i2', \$x1, \$y2}) + exists(\$cells->{pack 'i2', \$x0, \$y1}) + exists(\$cells->{pack 'i2', \$x0, \$y2}) + exists(\$cells->{pack 'i2', \$x2, \$y1}) + exists(\$cells->{pack 'i2', \$x2, \$y0}) + exists(\$cells->{pack 'i2', \$x2, \$y2}) == 3 ) } @zcells } keys %{\$cells} } = undef; \$self->{Cells} = \%newcells; }