diff options
| -rw-r--r-- | challenge-215/carlos-oliveira/perl/ch-1.pl | 20 | ||||
| -rw-r--r-- | challenge-215/carlos-oliveira/perl/ch-2.pl | 31 |
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; |
