aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-249/bob-lied/perl/ch-1.pl17
1 files changed, 14 insertions, 3 deletions
diff --git a/challenge-249/bob-lied/perl/ch-1.pl b/challenge-249/bob-lied/perl/ch-1.pl
index cd33587980..e829ac71ee 100644
--- a/challenge-249/bob-lied/perl/ch-1.pl
+++ b/challenge-249/bob-lied/perl/ch-1.pl
@@ -28,6 +28,10 @@ my $DoTest = 0;
GetOptions("test" => \$DoTest, "verbose" => \$Verbose);
exit(!runTest()) if $DoTest;
+say "(", join(", ",
+ map { "($_->[0], $_->[1])" } equalPairs(@ARGV)->@*),
+ ")";
+
sub equalPairs(@ints)
{
return [] if @ints % 2 == 1;
@@ -36,9 +40,14 @@ sub equalPairs(@ints)
return [] if any { $_ % 2 == 1 } values %freq;
my @pair;
- for my $n ( sort { $a <=> $b } keys %freq )
+ while ( %freq )
{
- push @pair, [ $n, $n ] for 1 .. $freq{$n}/2;
+ for my $n ( sort { $a <=> $b } keys %freq )
+ {
+ push @pair, [ $n, $n ];
+ $freq{$n} -= 2;
+ delete $freq{$n} if $freq{$n} == 0;
+ }
}
return \@pair;
}
@@ -47,8 +56,10 @@ sub runTest
{
use Test2::V0;
- is( equalPairs(3,2,3,2,2,2), [[2,2],[2,2],[3,3]], "Example 1");
+ is( equalPairs(3,2,3,2,2,2), [[2,2],[3,3],[2,2]], "Example 1");
is( equalPairs(1,2,3,4 ), [], "Example 2");
+ is( equalPairs(6,6,6,6,2,3,2,3,4,3,4,3), [[2,2],[3,3],[4,4],[6,6],[3,3],[6,6]], "More");
+
done_testing;
}