diff options
| author | carlos157oliveira <carlos157oliveira@gmail.com> | 2022-12-19 22:47:07 -0300 |
|---|---|---|
| committer | carlos157oliveira <carlos157oliveira@gmail.com> | 2022-12-19 22:47:07 -0300 |
| commit | bf684dde6d9020f7fa7db0065fb5173696a89c53 (patch) | |
| tree | be94506d813d8479240906608d5dd2773131fa1c | |
| parent | 80b02f0b8318ed6894e5f80f8fce6df973288d44 (diff) | |
| download | perlweeklychallenge-club-bf684dde6d9020f7fa7db0065fb5173696a89c53.tar.gz perlweeklychallenge-club-bf684dde6d9020f7fa7db0065fb5173696a89c53.tar.bz2 perlweeklychallenge-club-bf684dde6d9020f7fa7db0065fb5173696a89c53.zip | |
feat: solution for challenge 196
| -rw-r--r-- | challenge-196/carlos-oliveira/perl/ch-1.pl | 37 | ||||
| -rw-r--r-- | challenge-196/carlos-oliveira/perl/ch-2.pl | 33 |
2 files changed, 70 insertions, 0 deletions
diff --git a/challenge-196/carlos-oliveira/perl/ch-1.pl b/challenge-196/carlos-oliveira/perl/ch-1.pl new file mode 100644 index 0000000000..6d109d302b --- /dev/null +++ b/challenge-196/carlos-oliveira/perl/ch-1.pl @@ -0,0 +1,37 @@ +use strict; +use warnings; +use Data::Dump; + +sub findThirdValue { + my ($arrayRef, $firstValueIndex, $secondValueIndex) = @_; + my @array = @$arrayRef; + for my $i ($secondValueIndex+1 .. $#array) { + return $array[$i] if $array[$i] < $array[$secondValueIndex] + && $array[$i] > $array[$firstValueIndex]; + } + return undef +} + +sub findSecondAndThirdValues { + my ($arrayRef, $firstValueIndex) = @_; + my @array = @$arrayRef; + for my $i ($firstValueIndex+1 .. $#array) { + next unless $array[$firstValueIndex] < $array[$i]; + my $value3 = findThirdValue $arrayRef, $firstValueIndex, $i; + return ($array[$i], $value3) if defined $value3; + } + return (); +} + +sub pattern132 { + for my $i (0 .. $#_) { + my @remainingValues = findSecondAndThirdValues \@_, $i; + return ($_[$i], @remainingValues) if @remainingValues > 0 + } + return (); +} + +dd pattern132(3, 1, 4, 2); +dd pattern132(1, 2, 3, 4); +dd pattern132(1, 3, 2, 4, 6, 5); +dd pattern132(1, 3, 4, 2); diff --git a/challenge-196/carlos-oliveira/perl/ch-2.pl b/challenge-196/carlos-oliveira/perl/ch-2.pl new file mode 100644 index 0000000000..9354b6942e --- /dev/null +++ b/challenge-196/carlos-oliveira/perl/ch-2.pl @@ -0,0 +1,33 @@ +use strict; +use warnings; +use Data::Dump; +use List::MoreUtils qw(slideatatime); + + +sub intervals { + my $isRegistering = 0; + my $begin; + my @intervals; + my $iterator = slideatatime 1, 2, @_; + + # iterator fills with undef the free slots of the last window + while (my ($firstItem, $secondItem) = $iterator->()) { + unless (defined $secondItem && $firstItem + 1 == $secondItem) { + if ($isRegistering) { + push @intervals, [$begin, $firstItem]; + } + $isRegistering = 0; + next; + } + unless ($isRegistering) { + $isRegistering = 1; + $begin = $firstItem; + } + } + + return @intervals; +} + +dd intervals(1,3,4,5,7); +dd intervals(1,2,3,6,7,9); +dd intervals(0,1,2,4,5,6,8,9); |
