diff options
| author | Markus "Holli" Holzer <holli.holzer@gmail.com> | 2020-09-16 22:29:39 +0200 |
|---|---|---|
| committer | Markus "Holli" Holzer <holli.holzer@gmail.com> | 2020-09-16 22:29:39 +0200 |
| commit | 434feb90666199504c0d59e8556e10251c7018f1 (patch) | |
| tree | ef9cd6d66fc882abc9c81ed41b7723a69b5169e4 | |
| parent | ab01a45bc3d4ca9de131a86f0ddda5f1e1a393a9 (diff) | |
| download | perlweeklychallenge-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.pl | 17 | ||||
| -rw-r--r-- | challenge-078/markus-holzer/raku/ch-2.raku | 32 |
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 |
