aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus "Holli" Holzer <holli.holzer@gmail.com>2020-09-16 22:29:39 +0200
committerMarkus "Holli" Holzer <holli.holzer@gmail.com>2020-09-16 22:29:39 +0200
commit434feb90666199504c0d59e8556e10251c7018f1 (patch)
treeef9cd6d66fc882abc9c81ed41b7723a69b5169e4
parentab01a45bc3d4ca9de131a86f0ddda5f1e1a393a9 (diff)
downloadperlweeklychallenge-club-434feb90666199504c0d59e8556e10251c7018f1.tar.gz
perlweeklychallenge-club-434feb90666199504c0d59e8556e10251c7018f1.tar.bz2
perlweeklychallenge-club-434feb90666199504c0d59e8556e10251c7018f1.zip
#2 homemade. also perl
-rw-r--r--challenge-078/markus-holzer/perl/ch-2.pl17
-rw-r--r--challenge-078/markus-holzer/raku/ch-2.raku32
2 files changed, 47 insertions, 2 deletions
diff --git a/challenge-078/markus-holzer/perl/ch-2.pl b/challenge-078/markus-holzer/perl/ch-2.pl
new file mode 100644
index 0000000000..22b9bfac9b
--- /dev/null
+++ b/challenge-078/markus-holzer/perl/ch-2.pl
@@ -0,0 +1,17 @@
+use Modern::Perl;
+use feature qw(signatures);
+no warnings qw(experimental::signatures);
+
+my @A = (10, 20, 30, 40, 50);
+my @B = (3, 13, -2, 0);
+
+for my $by ( @B )
+{
+ say join ", ", rotate_array( $by, @A )
+}
+
+sub rotate_array( $i, @a )
+{
+ my $n = (@a + $i) % @a;
+ @a[ $n..(@a-1) ], @a[ 0..($n-1) ];
+} \ No newline at end of file
diff --git a/challenge-078/markus-holzer/raku/ch-2.raku b/challenge-078/markus-holzer/raku/ch-2.raku
index 7cd2766beb..9b462f4e2d 100644
--- a/challenge-078/markus-holzer/raku/ch-2.raku
+++ b/challenge-078/markus-holzer/raku/ch-2.raku
@@ -1,3 +1,31 @@
my @A = 10, 20, 30, 40, 50;
-my @B = 3, 4;
-dd @A.rotate($_) for @B; \ No newline at end of file
+my @B = 3, 13, -2, 0;
+
+say "Builtin";
+dd @A.rotate($_) for @B;
+
+say "Selfmade (multi)";
+dd rotate-array-multi( @A, $_ ) for @B;
+
+say "Selfmade (concise)";
+dd rotate-array-concise( @A, $_ ) for @B;
+
+say "Selfmade (concise)";
+rotate-array-inplace( @A, 3 );
+dd @A;
+
+multi rotate-array-multi( @a, $i where $i < 0 ) {
+ rotate-array-multi( @a, @a + $i ) }
+
+multi rotate-array-multi( @a, $i where $i >= @a ) {
+ rotate-array-multi( @a, $i % @a ) }
+
+multi rotate-array-multi( @a, $i ) {
+ [ |@a[ $i..* ], |@a[ ^$i ] ] }
+
+sub rotate-array-concise( @a, $i ) {
+ ( @a + $i ) % @a andthen [ |@a[ $_..* ], |@a[ ^$_ ] ] }
+
+sub rotate-array-inplace( @a, $i ) {
+ @a.splice( 0, 0, @a.splice( ( @a + $i ) % @a, *, [] ) );
+ @a } \ No newline at end of file