aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-09-01 10:39:06 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-09-01 10:39:06 +0100
commit5860460b59b9b17d55b6679d3fb54bff0e4a41f4 (patch)
treeb254929b1afc3f4ab703509ad6cebee8522b9686
parent1501066960b791e1d8ebbf7e172794e19b570ecd (diff)
downloadperlweeklychallenge-club-5860460b59b9b17d55b6679d3fb54bff0e4a41f4.tar.gz
perlweeklychallenge-club-5860460b59b9b17d55b6679d3fb54bff0e4a41f4.tar.bz2
perlweeklychallenge-club-5860460b59b9b17d55b6679d3fb54bff0e4a41f4.zip
- Tidied up folder.
-rwxr-xr-xchallenge-076/mohammad-anwar/perl/ch-2.t109
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 ];
- }
-}