diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-09-17 02:57:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-17 02:57:13 +0100 |
| commit | 380d384614b99a27719d6dc782d226c02c1f97af (patch) | |
| tree | dacb28dd8d04e6eefc3a5a6770b7c6ad1687a915 | |
| parent | 5467aa6b39db6fafe8184772086c76d1a1fb60f9 (diff) | |
| parent | 6dd4422d8c3686a5047c185d03d65a827f3fdebf (diff) | |
| download | perlweeklychallenge-club-380d384614b99a27719d6dc782d226c02c1f97af.tar.gz perlweeklychallenge-club-380d384614b99a27719d6dc782d226c02c1f97af.tar.bz2 perlweeklychallenge-club-380d384614b99a27719d6dc782d226c02c1f97af.zip | |
Merge pull request #2311 from holli-holzer/master
#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 | 35 |
2 files changed, 50 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..076d62d5c5 100644 --- a/challenge-078/markus-holzer/raku/ch-2.raku +++ b/challenge-078/markus-holzer/raku/ch-2.raku @@ -1,3 +1,34 @@ 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, 5; + +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 "In-Place"; +for @B { + my @a = @A.clone; + rotate-array-inplace( @a, $_ ); + 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 |
