diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-30 12:44:39 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-30 12:44:39 +0100 |
| commit | e2363e0a7f4e837ea4ecc53c2d616f69fe618c34 (patch) | |
| tree | 631067af314676e75ed3828befb67e16a8f77820 | |
| parent | 346d49c1558c193cdc9a8d9fe1298ba1f1e06f7a (diff) | |
| download | perlweeklychallenge-club-e2363e0a7f4e837ea4ecc53c2d616f69fe618c34.tar.gz perlweeklychallenge-club-e2363e0a7f4e837ea4ecc53c2d616f69fe618c34.tar.bz2 perlweeklychallenge-club-e2363e0a7f4e837ea4ecc53c2d616f69fe618c34.zip | |
- Tidied up Raku solutions.
| -rwxr-xr-x | challenge-075/mohammad-anwar/raku/ch-2.raku | 96 | ||||
| -rwxr-xr-x | challenge-075/mohammad-anwar/raku/ch-2.t | 96 |
2 files changed, 0 insertions, 192 deletions
diff --git a/challenge-075/mohammad-anwar/raku/ch-2.raku b/challenge-075/mohammad-anwar/raku/ch-2.raku index 024006d590..a591c6e9f1 100755 --- a/challenge-075/mohammad-anwar/raku/ch-2.raku +++ b/challenge-075/mohammad-anwar/raku/ch-2.raku @@ -106,99 +106,3 @@ sub prepare(Str $list is copy) { $list ~~ s:g/\s//; return [ $list.split(',').map({ .Int }) ]; } - -=finish - -my $list = prepare($L); -print chart($list), "\n\n"; -print "Largest Rectangle Histogram: ", largest_rectangle_histogram($list), "\n"; - -# -# -# 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 ]; - } -} diff --git a/challenge-075/mohammad-anwar/raku/ch-2.t b/challenge-075/mohammad-anwar/raku/ch-2.t index b0e420faa3..f6e50809da 100755 --- a/challenge-075/mohammad-anwar/raku/ch-2.t +++ b/challenge-075/mohammad-anwar/raku/ch-2.t @@ -104,99 +104,3 @@ sub prepare(Str $list is copy) { $list ~~ s:g/\s//; return [ $list.split(',').map({ .Int }) ]; } - -=finish - -my $list = prepare($L); -print chart($list), "\n\n"; -print "Largest Rectangle Histogram: ", largest_rectangle_histogram($list), "\n"; - -# -# -# 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 ]; - } -} |
