From 812dec8e834ff199c8973da474fba448084caddc Mon Sep 17 00:00:00 2001 From: "Gustavo L. de M. Chaves" Date: Mon, 1 Feb 2021 22:43:20 -0300 Subject: Add Gustavo Chaves's solutions to challenge 098 --- challenge-098/gustavo-chaves/perl/ch-1.pl | 40 +++++++++++++++++++++++++++++++ challenge-098/gustavo-chaves/perl/ch-2.pl | 25 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100755 challenge-098/gustavo-chaves/perl/ch-1.pl create mode 100755 challenge-098/gustavo-chaves/perl/ch-2.pl 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); +} -- cgit