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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.