diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-07-18 22:27:14 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-18 22:27:14 +0100 |
| commit | 54fac1f311ac66a832054cd7223d69a4e8d89be5 (patch) | |
| tree | f5d241d7cc6a658a56870fc597fea94a31d3b881 | |
| parent | 40f22f27abdf607141973eb55d89809006431e70 (diff) | |
| parent | 15a493ed37cf7217604ca29b40b448eda9e757aa (diff) | |
| download | perlweeklychallenge-club-54fac1f311ac66a832054cd7223d69a4e8d89be5.tar.gz perlweeklychallenge-club-54fac1f311ac66a832054cd7223d69a4e8d89be5.tar.bz2 perlweeklychallenge-club-54fac1f311ac66a832054cd7223d69a4e8d89be5.zip | |
Merge pull request #12362 from jaldhar/challenge-039
Challenge 39 by Jaldhar H. Vyas.
| -rw-r--r-- | challenge-039/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-039/jaldhar-h-vyas/guestbook.txt | 9 | ||||
| -rwxr-xr-x | challenge-039/jaldhar-h-vyas/perl5/ch-1.pl | 39 | ||||
| -rwxr-xr-x | challenge-039/jaldhar-h-vyas/perl5/ch-2.pl | 46 | ||||
| -rwxr-xr-x | challenge-039/jaldhar-h-vyas/perl6/ch-1.p6 | 24 | ||||
| -rwxr-xr-x | challenge-039/jaldhar-h-vyas/perl6/ch-2.p6 | 42 |
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]; +} |
