Hi eyepopslikeamosquito,
On my laptop, the following shaves 4 seconds from one-time stringification per key.
# Return the list of dead cells surrounding a cell
sub get_dead_cells {
my ( $cells, $x0, $y0 ) = ( shift->{Cells}, @_ );
my ( $x1, $x2, $y1, $y2 ) = ( $x0 - 1, $x0 + 1, $y0 - 1, $y0 + 1 );
my ( $k1, $k2, $k3, $k4, $k5, $k6, $k7, $k8 );
( ( $k1 = "$x1:$y1" ) x !( 0 + exists $cells->{ $k1 } ),
( $k2 = "$x1:$y0" ) x !( 0 + exists $cells->{ $k2 } ),
( $k3 = "$x1:$y2" ) x !( 0 + exists $cells->{ $k3 } ),
( $k4 = "$x0:$y1" ) x !( 0 + exists $cells->{ $k4 } ),
( $k5 = "$x0:$y2" ) x !( 0 + exists $cells->{ $k5 } ),
( $k6 = "$x2:$y1" ) x !( 0 + exists $cells->{ $k6 } ),
( $k7 = "$x2:$y0" ) x !( 0 + exists $cells->{ $k7 } ),
( $k8 = "$x2:$y2" ) x !( 0 + exists $cells->{ $k8 } ) );
}
To not allocate the key variables each time, another 2 seconds reduction is possible with the state feature.
use feature 'state';
# Return the list of dead cells surrounding a cell
sub get_dead_cells {
my ( $cells, $x0, $y0 ) = ( shift->{Cells}, @_ );
my ( $x1, $x2, $y1, $y2 ) = ( $x0 - 1, $x0 + 1, $y0 - 1, $y0 + 1 );
state ( $k1, $k2, $k3, $k4, $k5, $k6, $k7, $k8 );
( ( $k1 = "$x1:$y1" ) x !( 0 + exists $cells->{ $k1 } ),
( $k2 = "$x1:$y0" ) x !( 0 + exists $cells->{ $k2 } ),
( $k3 = "$x1:$y2" ) x !( 0 + exists $cells->{ $k3 } ),
( $k4 = "$x0:$y1" ) x !( 0 + exists $cells->{ $k4 } ),
( $k5 = "$x0:$y2" ) x !( 0 + exists $cells->{ $k5 } ),
( $k6 = "$x2:$y1" ) x !( 0 + exists $cells->{ $k6 } ),
( $k7 = "$x2:$y0" ) x !( 0 + exists $cells->{ $k7 } ),
( $k8 = "$x2:$y2" ) x !( 0 + exists $cells->{ $k8 } ) );
}
Regards, Mario
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
|
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.