diff options
| author | Bob Lied <boblied+github@gmail.com> | 2023-12-27 20:34:50 -0600 |
|---|---|---|
| committer | Bob Lied <boblied+github@gmail.com> | 2023-12-27 20:34:50 -0600 |
| commit | e2ae72dc78da7a0f59666483f741b43a4c9d4e6b (patch) | |
| tree | cde397fafadbba95d766b08c6ed34bf798157e8a | |
| parent | f5707cb9d39935d5534b852e71cbc746d35db647 (diff) | |
| download | perlweeklychallenge-club-e2ae72dc78da7a0f59666483f741b43a4c9d4e6b.tar.gz perlweeklychallenge-club-e2ae72dc78da7a0f59666483f741b43a4c9d4e6b.tar.bz2 perlweeklychallenge-club-e2ae72dc78da7a0f59666483f741b43a4c9d4e6b.zip | |
Task 1 output in same order as example
| -rw-r--r-- | challenge-249/bob-lied/perl/ch-1.pl | 17 |
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; } |
