61 lines
1.1 KiB
Perl
61 lines
1.1 KiB
Perl
#!/usr/bin/perl
|
|
use warnings;
|
|
use strict;
|
|
use feature qw{ say };
|
|
|
|
|
|
sub upper {
|
|
my ($i, $j) = @_;
|
|
my @m;
|
|
for my $x (0 .. $i - 1) {
|
|
for my $y (0 .. $j - 1) {
|
|
$m[$x][$y] = $x > $y ? 0
|
|
: ! $x || $x == $y ? 1
|
|
: $m[$x-1][$y-1] + $m[$x][$y-1];
|
|
}
|
|
}
|
|
return \@m
|
|
}
|
|
|
|
|
|
sub lower {
|
|
my ($i, $j) = @_;
|
|
my @m;
|
|
for my $x (0 .. $i - 1) {
|
|
for my $y (0 .. $j - 1) {
|
|
$m[$x][$y] = $x < $y ? 0
|
|
: ! $x || $x == $y ? 1
|
|
: $m[$x-1][$y-1] + $m[$x-1][$y];
|
|
}
|
|
}
|
|
return \@m
|
|
}
|
|
|
|
|
|
sub symmetric {
|
|
my ($i, $j) = @_;
|
|
my @m;
|
|
for my $x (0 .. $i - 1) {
|
|
for my $y (0 .. $j - 1) {
|
|
$m[$x][$y] = ! $x || ! $y ? 1
|
|
: $m[$x-1][$y] + $m[$x][$y-1];
|
|
}
|
|
}
|
|
return \@m
|
|
}
|
|
|
|
|
|
sub pretty {
|
|
my $m = shift;
|
|
for my $row (@$m) {
|
|
say join ', ', @$row;
|
|
}
|
|
}
|
|
|
|
|
|
pretty(upper(5, 5));
|
|
say '-' x 14;
|
|
pretty(lower(5, 5));
|
|
say '-' x 14;
|
|
pretty(symmetric(5, 5));
|