aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-098/gustavo-chaves/perl/ch-1.pl40
-rwxr-xr-xchallenge-098/gustavo-chaves/perl/ch-2.pl25
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);
+}