diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-04-03 01:02:33 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-03 01:02:33 +0100 |
| commit | e3a065aa869c230fae0420b847793bb050c623c6 (patch) | |
| tree | b8287fb96f4b068b6cde05815e2bb01531630afb | |
| parent | b7d27f41bff7839e882402dea68592b7b728317c (diff) | |
| parent | da1a3d3126511387938f02e0a965b627769222bb (diff) | |
| download | perlweeklychallenge-club-e3a065aa869c230fae0420b847793bb050c623c6.tar.gz perlweeklychallenge-club-e3a065aa869c230fae0420b847793bb050c623c6.tar.bz2 perlweeklychallenge-club-e3a065aa869c230fae0420b847793bb050c623c6.zip | |
Merge pull request #7834 from carlos157oliveira/challenge-210
solution to challenge 210
| -rw-r--r-- | challenge-210/carlos-oliveira/perl/ch-1.pl | 24 | ||||
| -rw-r--r-- | challenge-210/carlos-oliveira/perl/ch-2.pl | 27 |
2 files changed, 51 insertions, 0 deletions
diff --git a/challenge-210/carlos-oliveira/perl/ch-1.pl b/challenge-210/carlos-oliveira/perl/ch-1.pl new file mode 100644 index 0000000000..6e025cc805 --- /dev/null +++ b/challenge-210/carlos-oliveira/perl/ch-1.pl @@ -0,0 +1,24 @@ +use strict; +use warnings; +use v5.36; + +use Test::More; +use List::MoreUtils qw(frequency); + +sub kill_and_win (@integers) { + my %histogram = frequency @integers; + my $max_score = 0; + while (my ($integer, $count) = each %histogram) { + my $score = 0; + for (my $i = $integer - 1; $i <= $integer + 1; $i++) { + $score += ($histogram{$i} || 0) * $i; + } + $max_score = $score if $score > $max_score; + } + return $max_score; +} + +is kill_and_win(2, 3, 1), 6; +is kill_and_win(1, 1, 2, 2, 2, 3), 11; + +done_testing; diff --git a/challenge-210/carlos-oliveira/perl/ch-2.pl b/challenge-210/carlos-oliveira/perl/ch-2.pl new file mode 100644 index 0000000000..d8e6bd1cb2 --- /dev/null +++ b/challenge-210/carlos-oliveira/perl/ch-2.pl @@ -0,0 +1,27 @@ +use strict; +use warnings; +use v5.36; + +use Test::More; + +sub collide_numbers (@integers) { + my @result; + OUTER_LOOP: + for (my $i = 0; $i < @integers; $i++) { + my $increment = $integers[$i] > 0 ? 1 : -1; + my $stop_condition = $integers[$i] > 0 ? sub { $_[0] < @integers } : sub { $_[0] >= 0 }; + + for (my $u = $i + $increment; $stop_condition->($u); $u = $u + $increment) { + next unless $integers[$i] * $integers[$u] < 0; + next OUTER_LOOP if abs($integers[$i]) <= abs($integers[$u]); + } + push @result, $integers[$i]; + } + return @result; +} + +is_deeply [collide_numbers(2, 3, -1)], [2, 3]; +is_deeply [collide_numbers(3, 2, -4)], [-4]; +is_deeply [collide_numbers(1, -1)], []; + +done_testing; |
