From e2ae72dc78da7a0f59666483f741b43a4c9d4e6b Mon Sep 17 00:00:00 2001 From: Bob Lied Date: Wed, 27 Dec 2023 20:34:50 -0600 Subject: Task 1 output in same order as example --- challenge-249/bob-lied/perl/ch-1.pl | 17 ++++++++++++++--- 1 file 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; } -- cgit