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)));
|