aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-215/carlos-oliveira/perl/ch-1.pl20
-rw-r--r--challenge-215/carlos-oliveira/perl/ch-2.pl31
2 files changed, 51 insertions, 0 deletions
diff --git a/challenge-215/carlos-oliveira/perl/ch-1.pl b/challenge-215/carlos-oliveira/perl/ch-1.pl
new file mode 100644
index 0000000000..6ad2db904e
--- /dev/null
+++ b/challenge-215/carlos-oliveira/perl/ch-1.pl
@@ -0,0 +1,20 @@
+use strict;
+use warnings;
+use v5.36;
+
+use Test::More;
+
+sub out_with_the_odds ($words) {
+ my $original_size = @$words;
+ @$words = grep {
+ my @letters = sort split //, $_;
+ join('', @letters) eq $_;
+ } @$words;
+ return $original_size - @$words;
+}
+
+is out_with_the_odds(['abc', 'xyz', 'tsu']), 1;
+is out_with_the_odds(['rat', 'cab', 'dad']), 3;
+is out_with_the_odds(['x', 'y', 'z']), 0;
+
+done_testing;
diff --git a/challenge-215/carlos-oliveira/perl/ch-2.pl b/challenge-215/carlos-oliveira/perl/ch-2.pl
new file mode 100644
index 0000000000..8f6f3a7c05
--- /dev/null
+++ b/challenge-215/carlos-oliveira/perl/ch-2.pl
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+use v5.36;
+use builtin qw(true false);
+
+use Test::More;
+use List::Util qw(all);
+
+sub place_ones ($placement_total, $numbers) {
+ my @numbers = @$numbers;
+ my $placement_count = 0;
+ my $interval = 2;
+ for (
+ my $i = 0;
+ $i < @numbers - $interval && $placement_count < $placement_total;
+ $i++
+ ) {
+ next unless all { $_ == 0 } @numbers[$i .. $i+$interval];
+ $placement_count++;
+ # skip a number since the middle of this interval will be replaced with "1"
+ $i++;
+ }
+ return $placement_count == $placement_total;
+}
+
+is place_ones(1, [1,0,0,0,1]), true;
+is place_ones(2, [1,0,0,0,1]), false;
+is place_ones(3, [1,0,0,0,0,0,0,0,1]), true;
+is place_ones(4, [1,0,0,0,0,0,0,0,1]), false;
+
+done_testing;