diff options
| -rwxr-xr-x | challenge-098/gustavo-chaves/perl/ch-1.pl | 40 | ||||
| -rwxr-xr-x | challenge-098/gustavo-chaves/perl/ch-2.pl | 25 |
2 files changed, 65 insertions, 0 deletions
diff --git a/challenge-098/gustavo-chaves/perl/ch-1.pl b/challenge-098/gustavo-chaves/perl/ch-1.pl new file mode 100755 index 0000000000..f49ddd6757 --- /dev/null +++ b/challenge-098/gustavo-chaves/perl/ch-1.pl @@ -0,0 +1,40 @@ +#!/usr/bin/env perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-098/ +# TASK #1 › Read N-characters + +use 5.030; +use warnings; +use Fcntl; + +my ($FILE, @numbers) = @ARGV; + +sub readN { + my ($filename, $length) = @_; + + my ($fh, $buffer); + + state $cache = {}; + if (exists $cache->{$filename}) { + $fh = $cache->{$filename}; + } else { + if (sysopen($fh, $filename, O_RDONLY)) { + $cache->{$filename} = $fh; + } else { + die "Failed to sysopen '$filename'\n"; + } + } + + my $bytes_read = sysread($fh, $buffer, $length); + if (! defined $bytes_read) { + die "Failed to sysread '$filename'\n"; + } elsif ($bytes_read == 0) { + delete $cache->{$filename}; + } + + return $buffer; +} + +foreach my $number (@numbers) { + print readN($FILE, $number), "\n"; +} diff --git a/challenge-098/gustavo-chaves/perl/ch-2.pl b/challenge-098/gustavo-chaves/perl/ch-2.pl new file mode 100755 index 0000000000..92d2d62cb9 --- /dev/null +++ b/challenge-098/gustavo-chaves/perl/ch-2.pl @@ -0,0 +1,25 @@ +#!/usr/bin/env perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-098/ +# TASK #2 › Search Insert Position + +use 5.030; +use warnings; + +my %inputs = ( + 3 => [1, 2, 3, 4], + 6 => [1, 3, 5, 7], + 10 => [12, 14, 16, 18], + 19 => [11, 13, 15, 17], +); + +INPUT: while (my ($target, $integers) = each %inputs) { + say "Input: \@N = (@$integers) and \$N = $target"; + for my $i (0 .. $#$integers) { + if ($integers->[$i] >= $target) { + say "Output: $i"; + next INPUT; + } + } + say "Output: ", scalar(@$integers); +} |
