diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-01 10:40:22 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-01 10:40:22 +0100 |
| commit | 822f6240abd1361df0e8ab6b70725e414e09549e (patch) | |
| tree | 703b29c322720900cb8949b1a9e3106f084b6612 | |
| parent | 5860460b59b9b17d55b6679d3fb54bff0e4a41f4 (diff) | |
| download | perlweeklychallenge-club-822f6240abd1361df0e8ab6b70725e414e09549e.tar.gz perlweeklychallenge-club-822f6240abd1361df0e8ab6b70725e414e09549e.tar.bz2 perlweeklychallenge-club-822f6240abd1361df0e8ab6b70725e414e09549e.zip | |
- Further tidied up folders.
| -rwxr-xr-x | challenge-076/mohammad-anwar/perl/ch-1.t | 67 | ||||
| -rwxr-xr-x | challenge-076/mohammad-anwar/raku/ch-1.t | 57 | ||||
| -rwxr-xr-x | challenge-076/mohammad-anwar/raku/ch-2.t | 106 |
3 files changed, 0 insertions, 230 deletions
diff --git a/challenge-076/mohammad-anwar/perl/ch-1.t b/challenge-076/mohammad-anwar/perl/ch-1.t deleted file mode 100755 index c2d32443b5..0000000000 --- a/challenge-076/mohammad-anwar/perl/ch-1.t +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl - -# -# Perl Weekly Challenge - 075 -# -# Task #1: Coins Sum -# -# https://perlweeklychallenge.org/blog/perl-weekly-challenge-075 -# - -use strict; -use warnings; -use Test::More; - -is coins_sum(prepare("1, 2"), 5), 3; -is coins_sum(prepare("1, 2, 3"), 5), 5; -is coins_sum(prepare("1, 2, 4"), 6), 6; -is coins_sum(prepare("25, 10, 5"), 30), 5; -is coins_sum(prepare("9, 6, 5, 1"), 11), 6; - -done_testing; - -# -# -# METHODS - -sub coins_sum { - my ($coins, $sum) = @_; - - my $size = $#$coins; - return 0 if ($size == -1 || $sum <= 0); - - my $matrix; - - # Sum of 0 can be achieved in one possible way. - $matrix->[$_][0] = 1 for (0 .. $size+1); - - foreach my $i (0 .. $size) { - - foreach my $j (1 .. $sum) { - - my $include_current = 0; - my $exclude_current = 0; - - if ($coins->[$i] <= $j) { - $include_current = $matrix->[$i][$j - $coins->[$i]]; - } - - if ($i > 0) { - $exclude_current = $matrix->[$i - 1][$j]; - } - - $matrix->[$i][$j] = $include_current + $exclude_current; - } - } - - return $matrix->[$size][$sum]; -} - -sub prepare { - my ($coins) = @_; - - if (defined $coins) { - $coins =~ s/\s//g; - return [ split /\,/, $coins ]; - } -} diff --git a/challenge-076/mohammad-anwar/raku/ch-1.t b/challenge-076/mohammad-anwar/raku/ch-1.t deleted file mode 100755 index e1a0e5b656..0000000000 --- a/challenge-076/mohammad-anwar/raku/ch-1.t +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env raku - -# -# Perl Weekly Challenge - 075 -# -# Task #1: Coins Sum -# -# https://perlweeklychallenge.org/blog/perl-weekly-challenge-075 -# - -use Test; - -is coins-sum("1, 2", 5), 3, "Coins=[1, 2] Sum=5"; -is coins-sum("1, 2, 3", 5), 5, "Coins=[1, 2, 3] Sum=5"; -is coins-sum("1, 2, 4", 6), 6, "Coins=[1, 2, 4] Sum=6"; -is coins-sum("25, 10, 5", 30), 5, "Coins=[25, 10, 5] Sum=30"; -is coins-sum("9, 6, 5, 1", 11), 6, "Coins=[9, 6, 5, 1] Sum=6"; - -done-testing; - -sub coins-sum(Str $coins is copy, Int $sum) returns Int { - - die "ERROR: Invalid coins [$coins].\n" - unless $coins ~~ /^[\s?\-?\d\,?\s?]+$/; - - $coins ~~ s:g/\s//; - my $_coins = [ $coins.split(',').map({ .Int }) ]; - - my $size = $_coins.elems; - return 0 if ($size == 0 || $sum <= 0); - - my $matrix; - - # Sum of 0 can be achieved in one possible way. - $matrix.[$_][0] = 1 for (0 .. $size-1); - - for 0 .. $size-1 -> $i { - - for 1 .. $sum -> $j { - - my Int $include-current = 0; - my Int $exclude-current = 0; - - if $_coins.[$i] <= $j { - $include-current = $matrix.[$i][$j - $_coins.[$i]]; - } - - if $i > 0 { - $exclude-current = $matrix.[$i - 1][$j]; - } - - $matrix.[$i][$j] = $include-current + $exclude-current; - } - } - - return $matrix.[$size-1][$sum]; -} diff --git a/challenge-076/mohammad-anwar/raku/ch-2.t b/challenge-076/mohammad-anwar/raku/ch-2.t deleted file mode 100755 index f6e50809da..0000000000 --- a/challenge-076/mohammad-anwar/raku/ch-2.t +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env raku - -# -# Perl Weekly Challenge - 075 -# -# Task #2: Largest Rectangle Histogram -# -# https://perlweeklychallenge.org/blog/perl-weekly-challenge-075 -# - -use Test; - -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($list where .all ~~ Int) returns Int { - - my Int $i = 0; - my Int $max = 0; - - for 0 .. $list.elems-1 -> $i { - - my (Int $left, Int $right) = (0, 0); - $left = go-left($i, $list) if $i > 0; - $right = go-right($i, $list) if $i < $list.elems; - - my $heights = $list.[$i - $left .. $i + $right]; - my $size = $heights.min * $heights.elems; - - $max = $size if $size > $max; - } - - return $max; -} - -sub go-left(Int $i is copy, $list where .all ~~ Int) returns Int { - - my $c = $list.[$i]; - my $j = 0; - while $i > 0 { - $i = $i - 1; - last if $list.[$i] < $c; - $j = $j + 1; - } - - return $j; -} - -sub go-right(Int $i is copy, $list where .all ~~ Int) returns Int { - - my $c = $list.[$i]; - my $j = 0; - while $i < $list.elems-1 { - $i += 1; - last if $list.[$i] < $c; - $j += 1; - } - - return $j; -} - -sub chart($list where .all ~~ Int) { - - my $max = $list.max; - my $chart = []; - my $row = 1; - for 1 .. $max -> $n { - my Str $data = ""; - for 0 .. $list.elems-1 -> $i { - if $row <= $list.[$i] { - $data ~= " #"; - } - else { - $data ~= " "; - } - } - - $row += 1; - - $chart.push: sprintf("%d%s", $n, $data); - } - - my (Str $histogram, Str $line, Str $size) = ("", "", " "); - $histogram = $chart.reverse.join("\n"); - $line ~= "_ " for 0 .. $list.elems; - $size ~= $list.join(" "); - - return ($histogram, $line, $size).join("\n"); -} - -sub prepare(Str $list is copy) { - - return unless $list.defined; - - die "ERROR: Invalid list [$list].\n" - unless $list ~~ /^[\s?\-?\d\,?\s?]+$/; - - $list ~~ s:g/\s//; - return [ $list.split(',').map({ .Int }) ]; -} |
