diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-11-26 12:19:53 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-26 12:19:53 +0000 |
| commit | aa28bdcd814412b91226d2cb59b820538c03dc3c (patch) | |
| tree | fd2686f06e67e1c5131a3d6f211f667e39e93b36 | |
| parent | db532e4eefcb168ef9ee39aac9325253053bcbfb (diff) | |
| parent | 4d97b516d2a467b863ddc26b3921649e515b8327 (diff) | |
| download | perlweeklychallenge-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-x | challenge-192/steve-g-lynn/perl/ch-2.pl | 24 | ||||
| -rwxr-xr-x | challenge-192/steve-g-lynn/raku/ch-2.p6 | 21 |
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; |
