Expanding the solution to allow for reversing groups of multiple elements.
use strict;
use warnings;
use feature qw{ say };
use List::Util qw{ min };
my @arr = ( 1 .. 9 );
say qq{@arr};
my @twos = reverseGroupsOf( 2, @arr );
say qq{@twos};
my @threes = reverseGroupsOf( 3, @arr );
say qq{@threes};
my @fours = reverseGroupsOf( 4, @arr );
say qq{@fours};
sub reverseGroupsOf
{
my $groupsOf = shift;
my $rcReverse;
$rcReverse = sub
{
reverse( map shift, 1 .. min scalar( @_, $groupsOf ),
@_ ? &$rcReverse : ();
};
&$rcReverse;
}
1 2 3 4 5 6 7 8 9
2 1 4 3 6 5 8 7 9
3 2 1 6 5 4 9 8 7
4 3 2 1 8 7 6 5 9
I hope this is of interest.
-
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.
|