diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-01 10:39:06 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-01 10:39:06 +0100 |
| commit | 5860460b59b9b17d55b6679d3fb54bff0e4a41f4 (patch) | |
| tree | b254929b1afc3f4ab703509ad6cebee8522b9686 | |
| parent | 1501066960b791e1d8ebbf7e172794e19b570ecd (diff) | |
| download | perlweeklychallenge-club-5860460b59b9b17d55b6679d3fb54bff0e4a41f4.tar.gz perlweeklychallenge-club-5860460b59b9b17d55b6679d3fb54bff0e4a41f4.tar.bz2 perlweeklychallenge-club-5860460b59b9b17d55b6679d3fb54bff0e4a41f4.zip | |
- Tidied up folder.
| -rwxr-xr-x | challenge-076/mohammad-anwar/perl/ch-2.t | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/challenge-076/mohammad-anwar/perl/ch-2.t b/challenge-076/mohammad-anwar/perl/ch-2.t deleted file mode 100755 index 51ba0dec90..0000000000 --- a/challenge-076/mohammad-anwar/perl/ch-2.t +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/perl - -# -# Perl Weekly Challenge - 075 -# -# Task #2: Largest Rectangle Histogram -# -# https://perlweeklychallenge.org/blog/perl-weekly-challenge-075 -# - -use strict; -use warnings; -use Test::More; -use List::Util qw(min max); - -is(largest_rectangle_histogram(prepare("2, 1, 4, 5, 3, 7")), 12, "example 1"); -is(largest_rectangle_histogram(prepare("3, 2, 3, 5, 7, 5")), 15, "example 2"); - -done_testing; - -# -# -# METHODS - -sub largest_rectangle_histogram { - my ($list) = @_; - - my $i = 0; - my $max = 0; - foreach my $n (@$list) { - - my ($left, $right) = (0, 0); - $left = go_left($i, $list) if ($i > 0); - $right = go_right($i, $list) if ($i <= $#$list); - - my @heights = (@$list)[$i - $left .. $i + $right]; - my $size = min(@heights) * @heights; - $max = $size if ($size > $max); - - $i++; - } - - return $max; -} - -sub go_left { - my ($i, $list) = @_; - - my $c = $list->[$i]; - my $j = 0; - while ($i > 0) { - $i--; - last if ($list->[$i] < $c); - $j++; - } - - return $j; -} - -sub go_right { - my ($i, $list) = @_; - - my $c = $list->[$i]; - my $j = 0; - while ($i < $#$list) { - $i++; - last if ($list->[$i] < $c); - $j++; - } - - return $j; -} - -sub chart { - my ($list) = @_; - - my $max = max(@$list); - my $chart = []; - my $row = 1; - foreach (1..$max) { - my $data = ""; - foreach my $i (0..$#$list) { - if ($row <= $list->[$i]) { - $data .= " #"; - } - else { - $data .= " "; - } - } - $row++; - push @$chart, sprintf("%d%s", $_, $data); - } - - my ($histogram, $line, $size) = ("", "", " "); - $histogram = join "\n", (reverse @$chart); - $line .= "_ " for (0..$#$list + 1); - $size .= join " ", @$list; - - return join "\n", $histogram, $line, $size; -} - -sub prepare { - my ($list) = @_; - - if (defined $list) { - $list =~ s/\s//g; - return [ split /\,/, $list ]; - } -} |
