diff options
| author | Alexander Pankoff <ccntrq@screenri.de> | 2020-11-24 15:10:44 +0100 |
|---|---|---|
| committer | Alexander Pankoff <ccntrq@screenri.de> | 2020-11-29 23:37:10 +0100 |
| commit | 2c27c301d3a490bcdd20a3f390b5da053cda8531 (patch) | |
| tree | 29543773d83631de5e016097cc4e77a67ef49798 | |
| parent | 1ffdb91ce5310fb8145b23f7ffdb6d5ef8600d3f (diff) | |
| download | perlweeklychallenge-club-2c27c301d3a490bcdd20a3f390b5da053cda8531.tar.gz perlweeklychallenge-club-2c27c301d3a490bcdd20a3f390b5da053cda8531.tar.bz2 perlweeklychallenge-club-2c27c301d3a490bcdd20a3f390b5da053cda8531.zip | |
add perl solutions for challenge-088:
| -rw-r--r-- | challenge-088/alexander-pankoff/perl/ch-1.pl | 27 | ||||
| -rw-r--r-- | challenge-088/alexander-pankoff/perl/ch-2.pl | 39 |
2 files changed, 66 insertions, 0 deletions
diff --git a/challenge-088/alexander-pankoff/perl/ch-1.pl b/challenge-088/alexander-pankoff/perl/ch-1.pl new file mode 100644 index 0000000000..bd25fb4e99 --- /dev/null +++ b/challenge-088/alexander-pankoff/perl/ch-1.pl @@ -0,0 +1,27 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +use List::Util qw(product); + +{ + my @N = ( 5, 2, 1, 4, 3 ); + my @M = array_of_product(@N); + say '(' . join( ', ', @M ) . ')'; +} + +sub array_of_product(@arr) { + + # we first calculate the product of all array elements + my $total = product(@arr); + + # each item in the output is then the result of factoring out the + # corresponding element from the input list from that total + my @out = map { $total / $_ } @arr; + + return @out; +} diff --git a/challenge-088/alexander-pankoff/perl/ch-2.pl b/challenge-088/alexander-pankoff/perl/ch-2.pl new file mode 100644 index 0000000000..0c856723c3 --- /dev/null +++ b/challenge-088/alexander-pankoff/perl/ch-2.pl @@ -0,0 +1,39 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +{ + my $MATRIX = [ + [ 1, 2, 3, 4 ], # + [ 5, 6, 7, 8 ], # + [ 9, 10, 11, 12 ], # + [ 13, 14, 15, 16 ], # + ]; + + say join( ', ', spriral_matrix($MATRIX) ) +} + +sub spriral_matrix($matrix) { + my @matrix = @$matrix; + + return () if !@matrix; + + # get top and bottom row an remove them from the input + my ( $top, $bot ); + ( $top, @matrix ) = @$matrix; + ( $bot, @matrix ) = ( $matrix[-1], @matrix[ 0 ... ( $#matrix - 1 ) ] ); + + # get left and right side from the remaining rows + my @left_side = map { $_->[0] } @matrix; + my @right_side = map { $_->[-1] } @matrix; + + # remove left and right side from the matrix + @matrix = map { [ @{$_}[ 1 ... ( $#$_ - 1 ) ] ] } @matrix; + + return ( @$top, @right_side, reverse( @{ $bot // [] } ), + reverse(@left_side), spriral_matrix( \@matrix ) ); +} |
