aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-04-03 01:02:33 +0100
committerGitHub <noreply@github.com>2023-04-03 01:02:33 +0100
commite3a065aa869c230fae0420b847793bb050c623c6 (patch)
treeb8287fb96f4b068b6cde05815e2bb01531630afb
parentb7d27f41bff7839e882402dea68592b7b728317c (diff)
parentda1a3d3126511387938f02e0a965b627769222bb (diff)
downloadperlweeklychallenge-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.pl24
-rw-r--r--challenge-210/carlos-oliveira/perl/ch-2.pl27
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;