aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2025-07-17 00:46:10 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2025-07-17 17:21:55 -0400
commit15a493ed37cf7217604ca29b40b448eda9e757aa (patch)
tree2acc03a627b60d5071e6300bc09abe7374d0f918
parent62faec52722a9629a7533feba35cdeb232b3963c (diff)
downloadperlweeklychallenge-club-15a493ed37cf7217604ca29b40b448eda9e757aa.tar.gz
perlweeklychallenge-club-15a493ed37cf7217604ca29b40b448eda9e757aa.tar.bz2
perlweeklychallenge-club-15a493ed37cf7217604ca29b40b448eda9e757aa.zip
Challenge 39 by Jaldhar H. Vyas.
-rw-r--r--challenge-039/jaldhar-h-vyas/blog.txt1
-rw-r--r--challenge-039/jaldhar-h-vyas/guestbook.txt9
-rwxr-xr-xchallenge-039/jaldhar-h-vyas/perl5/ch-1.pl39
-rwxr-xr-xchallenge-039/jaldhar-h-vyas/perl5/ch-2.pl46
-rwxr-xr-xchallenge-039/jaldhar-h-vyas/perl6/ch-1.p624
-rwxr-xr-xchallenge-039/jaldhar-h-vyas/perl6/ch-2.p642
6 files changed, 161 insertions, 0 deletions
diff --git a/challenge-039/jaldhar-h-vyas/blog.txt b/challenge-039/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..44557ec542
--- /dev/null
+++ b/challenge-039/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2025/07/perl_weekly_challenge_week_39.html
diff --git a/challenge-039/jaldhar-h-vyas/guestbook.txt b/challenge-039/jaldhar-h-vyas/guestbook.txt
new file mode 100644
index 0000000000..a2467461cd
--- /dev/null
+++ b/challenge-039/jaldhar-h-vyas/guestbook.txt
@@ -0,0 +1,9 @@
+1) Alex IN: 09:10 OUT: 09:45
+2) Arnold IN: 09:15 OUT: 09:33
+3) Bob IN: 09:22 OUT: 09:55
+4) Charlie IN: 09:25 OUT: 10:05
+5) Steve IN: 09:33 OUT: 10:01
+6) Roger IN: 09:44 OUT: 10:12
+7) David IN: 09:57 OUT: 10:23
+8) Neil IN: 10:01 OUT: 10:19
+9) Chris IN: 10:10 OUT: 11:00
diff --git a/challenge-039/jaldhar-h-vyas/perl5/ch-1.pl b/challenge-039/jaldhar-h-vyas/perl5/ch-1.pl
new file mode 100755
index 0000000000..ac8e575838
--- /dev/null
+++ b/challenge-039/jaldhar-h-vyas/perl5/ch-1.pl
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use English qw/-no_match_vars /;
+use 5.010;
+
+sub time2minutes {
+ my $time = shift;
+ my ($hours, $minutes) = split q{:}, $time;
+
+ return $hours * 60 + $minutes;
+}
+
+
+my $earliest = "Inf";
+my $latest = "-Inf";
+
+my $file = open my $fh, '<', 'guestbook.txt' or die "$OS_ERROR\n";
+local $RS = undef;
+my $data = <$fh>;
+close $fh;
+
+my @lines = split /\n/, $data;
+
+for my $line (@lines) {
+ my ($in, $out) = map { time2minutes($_) } (split /\s+/, $line)[3, 5];
+ if (defined $in && defined $out) {
+
+ if ($in < $earliest) {
+ $earliest = $in;
+ }
+
+ if ($out > $latest) {
+ $latest = $out;
+ }
+ }
+}
+
+say 'The lights were on for ', $latest - $earliest, ' minutes.';
diff --git a/challenge-039/jaldhar-h-vyas/perl5/ch-2.pl b/challenge-039/jaldhar-h-vyas/perl5/ch-2.pl
new file mode 100755
index 0000000000..6d5c50e2c3
--- /dev/null
+++ b/challenge-039/jaldhar-h-vyas/perl5/ch-2.pl
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use 5.010;
+use feature qw/ switch /;
+
+unless (@ARGV) {
+ die "Usage: $0 <expression>\n";
+}
+
+my @tokens = split /\s+/, shift;
+my @stack;
+
+foreach my $token (@tokens) {
+ if ($token =~ /^[+-]?\d+$/) {
+ push @stack, $token;
+ } else {
+ my $b = pop @stack;
+ my $a = pop @stack;
+
+ unless (defined $a && defined $b) {
+ die "Insufficient operands for '$token'\n";
+ }
+
+ my $result;
+ given ($token) {
+ when '+' { $result = $a + $b; }
+ when '-' { $result = $a - $b; }
+ when '*' { $result = $a * $b; }
+ when '/' {
+ if ($b == 0) {
+ die "Division by zero\n";
+ }
+ $result = $a / $b;
+ }
+ default { die "Unknown operator: '$token'\n"; }
+ }
+ push @stack, $result;
+ }
+}
+
+if (@stack != 1) {
+ die "Invalid expression: stack contains extra values\n";
+}
+
+say $stack[0];
diff --git a/challenge-039/jaldhar-h-vyas/perl6/ch-1.p6 b/challenge-039/jaldhar-h-vyas/perl6/ch-1.p6
new file mode 100755
index 0000000000..71a58713b7
--- /dev/null
+++ b/challenge-039/jaldhar-h-vyas/perl6/ch-1.p6
@@ -0,0 +1,24 @@
+#!/usr/bin/perl6
+
+sub time2minutes($time) {
+ my ($hours, $minutes) = $time.split(q{:});
+ return $hours * 60 + $minutes;
+}
+
+sub MAIN() {
+ my $earliest = ∞;
+ my $latest = -∞;
+
+ for './guestbook.txt'.IO.lines -> $line {
+ my ($in, $out) = ($line.words)[3,5].map({ time2minutes($_) });
+ if $in < $earliest {
+ $earliest = $in;
+ }
+
+ if $out > $latest {
+ $latest = $out;
+ }
+ }
+
+ say 'The lights were on for ', $latest - $earliest, ' minutes.';
+}
diff --git a/challenge-039/jaldhar-h-vyas/perl6/ch-2.p6 b/challenge-039/jaldhar-h-vyas/perl6/ch-2.p6
new file mode 100755
index 0000000000..08352fb3f5
--- /dev/null
+++ b/challenge-039/jaldhar-h-vyas/perl6/ch-2.p6
@@ -0,0 +1,42 @@
+#!/usr/bin/perl6
+
+sub MAIN(
+ Str $expression #= a string consisting of number and the operators +, -, *, /
+) {
+ my @tokens = $expression.words;
+ my @stack;
+
+ for @tokens -> $token {
+ if $token.match(/^ <[+-]>? \d+ $/) {
+ push @stack, $token;
+ } else {
+ my $b = @stack.pop;
+ my $a = @stack.pop;
+
+ unless $a.defined && $b.defined {
+ die "Insufficient operands for '$token'\n";
+ }
+
+ my $result;
+ given $token {
+ when '+' { $result = $a + $b; }
+ when '-' { $result = $a - $b; }
+ when '*' { $result = $a * $b; }
+ when '/' {
+ if ($b == 0) {
+ die "Division by zero\n";
+ }
+ $result = $a / $b;
+ }
+ default { die "Unknown operator: '$token'\n"; }
+ }
+ push @stack, $result;
+ }
+ }
+
+ if @stack.elems != 1 {
+ die "Invalid expression: stack contains extra values\n";
+ }
+
+ say @stack[0];
+}