From 434feb90666199504c0d59e8556e10251c7018f1 Mon Sep 17 00:00:00 2001 From: "Markus \"Holli\" Holzer" Date: Wed, 16 Sep 2020 22:29:39 +0200 Subject: #2 homemade. also perl --- challenge-078/markus-holzer/perl/ch-2.pl | 17 ++++++++++++++++ challenge-078/markus-holzer/raku/ch-2.raku | 32 ++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 challenge-078/markus-holzer/perl/ch-2.pl 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 -- cgit