aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-11-26 12:19:53 +0000
committerGitHub <noreply@github.com>2022-11-26 12:19:53 +0000
commitaa28bdcd814412b91226d2cb59b820538c03dc3c (patch)
treefd2686f06e67e1c5131a3d6f211f667e39e93b36
parentdb532e4eefcb168ef9ee39aac9325253053bcbfb (diff)
parent4d97b516d2a467b863ddc26b3921649e515b8327 (diff)
downloadperlweeklychallenge-club-aa28bdcd814412b91226d2cb59b820538c03dc3c.tar.gz
perlweeklychallenge-club-aa28bdcd814412b91226d2cb59b820538c03dc3c.tar.bz2
perlweeklychallenge-club-aa28bdcd814412b91226d2cb59b820538c03dc3c.zip
Merge pull request #7154 from steve-g-lynn/branch-for-challenge-192
bugfix ch-2
-rwxr-xr-xchallenge-192/steve-g-lynn/perl/ch-2.pl24
-rwxr-xr-xchallenge-192/steve-g-lynn/raku/ch-2.p621
2 files changed, 10 insertions, 35 deletions
diff --git a/challenge-192/steve-g-lynn/perl/ch-2.pl b/challenge-192/steve-g-lynn/perl/ch-2.pl
index 1ec5fe44cf..f33219a376 100755
--- a/challenge-192/steve-g-lynn/perl/ch-2.pl
+++ b/challenge-192/steve-g-lynn/perl/ch-2.pl
@@ -7,30 +7,18 @@ local *equal_distribution=sub {
#-- nested sub-subroutines
local *minindx = sub {
- local (@list)=@_;
(grep {$list[$_] == (min @list)} (0 .. @list));
};
local *maxindx = sub {
- local (@list)=@_;
(grep {$list[$_] == (max @list)} (0 .. @list));
};
- local *distance = sub {
- local (@list)=@_;
- min (
- abs((max &maxindx(@list))-(min &minindx(@list))),
- abs((min &maxindx(@list))-(max &minindx(@list)))
- );
- };
-
local *closest_pair = sub {
- local (@list)=@_;
local (@retval);
- local (@minindx)=&minindx(@list);
- local (@maxindx)=&maxindx(@list);
-
+ local (@minindx) = &minindx;
+ local (@maxindx) = &maxindx;
local ($min_min,$max_min,$min_max,$max_max)=(
(min @minindx),
@@ -50,7 +38,7 @@ local *equal_distribution=sub {
$last_ctr=$ctr;
}
}
- }
+ }
return @retval;
};
@@ -60,9 +48,9 @@ local *equal_distribution=sub {
};
local *iterate = sub {
- local (@closest_pair)=&closest_pair(@list);
+ local (@closest_pair)=&closest_pair;
- $count += &distance(@list);
+ $count += abs($closest_pair[0]-$closest_pair[1]);
($list[$closest_pair[0]]) += 1;
($list[$closest_pair[1]]) -= 1;
};
@@ -86,7 +74,7 @@ local *equal_distribution=sub {
print &equal_distribution(1,0,5),"\n"; #4
print &equal_distribution(0,2,0),"\n"; #-1
print &equal_distribution(0,3,0),"\n"; #2
-
+print &equal_distribution(5,2,3,1,4),"\n"; #5
}
diff --git a/challenge-192/steve-g-lynn/raku/ch-2.p6 b/challenge-192/steve-g-lynn/raku/ch-2.p6
index 4af1802400..a10e6cc10e 100755
--- a/challenge-192/steve-g-lynn/raku/ch-2.p6
+++ b/challenge-192/steve-g-lynn/raku/ch-2.p6
@@ -4,6 +4,7 @@
say &equal-distribution((1,0,5)); #4
say &equal-distribution((0,2,0)); #-1
say &equal-distribution((0,3,0)); #2
+say &equal-distribution((5,2,3,1,4)); #5
#-- helper subs
@@ -15,14 +16,8 @@ sub maxindx (@list) {
(0 .. @list.elems-1).grep( {@list[$_] == (@list.max)} );
}
-sub distance (@list) {
- min (
- abs(&maxindx(@list).max - &minindx(@list).min),
- abs(&maxindx(@list).min - &minindx(@list).max)
- );
-}
-sub closest_pair (@list) {
+sub closest-pair (@list) {
my (@retval);
my @minindx=&minindx(@list);
@@ -54,14 +49,6 @@ sub is_equal( @list, $tgt ) {
@list.map({$_==$tgt}).sum==@list;
}
-sub iterate( @list ) {
-
- my $distance=&distance(@list);
-
- my ($minindx,$maxindx)=&closest_pair(@list);
-
- return ($distance, $minindx, $maxindx)
-}
#-- root sub
@@ -82,9 +69,9 @@ sub equal-distribution(@list_) {
(&is_equal(@list, $tgt)) && (return $count);
- my ($distance, $minindx, $maxindx) = &iterate(@list);
+ my ($minindx, $maxindx) = &closest-pair(@list);
- $count += $distance;
+ $count += ($minindx - $maxindx).abs;
@list[$minindx] += 1;
@list[$maxindx] -= 1;