aboutsummaryrefslogtreecommitdiff
path: root/challenge-088/polettix/perl/ch-1.pl
blob: 23dac15715f35eb18b393aca80a4ebfd3fcb17f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env perl
use 5.024;
use warnings;
use experimental qw< postderef signatures >;
no warnings qw< experimental::postderef experimental::signatures >;

sub array_of_product (@N) {
   my $p = 1;
   $p *= $_ for @N[0 .. $#N - 1];
   return map {$p = $N[$_ - 1] * ($p / $N[$_]) } 0 .. $#N;
}

sub array_of_product_sloppy (@N) {
   return map {
      my $p = 1;
      $p *= $_ for @N[0 .. $_ - 1, $_ + 1 .. $#N];
      $p;
   } 0 .. $#N;
}

sub array_of_product_overflowing (@N) {
   my $p = 1;
   $p *= $_ for @N;
   return map {$p / $_ } @N;
}

sub print_array (@A) { local $" = ', '; say "(@A)" }

print_array(array_of_product(@ARGV ? @ARGV : (5, 2, 1, 4, 3)));
print_array(array_of_product_sloppy(@ARGV ? @ARGV : (5, 2, 1, 4, 3)));
print_array(array_of_product_overflowing(@ARGV ? @ARGV : (5, 2, 1, 4, 3)));