diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-12-17 12:30:56 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-17 12:30:56 +0000 |
| commit | df9b417744ded3eebc3caa98181b9604c215259d (patch) | |
| tree | b2ed20c46ab1b698b612c412ac456e938bc4f6e1 /challenge-039 | |
| parent | 7d48177fa10759d9bc029c45a86a8e3da53a7da6 (diff) | |
| parent | c3497f2ab3d29d8578be2f238823f0c25ee9d489 (diff) | |
| download | perlweeklychallenge-club-df9b417744ded3eebc3caa98181b9604c215259d.tar.gz perlweeklychallenge-club-df9b417744ded3eebc3caa98181b9604c215259d.tar.bz2 perlweeklychallenge-club-df9b417744ded3eebc3caa98181b9604c215259d.zip | |
Merge pull request #1046 from drclaw1394/master
drclaw/ruben solutions to w39 ch-1 and ch-2. perl and raku
Diffstat (limited to 'challenge-039')
| -rw-r--r-- | challenge-039/ruben-westerberg/README | 5 | ||||
| -rwxr-xr-x | challenge-039/ruben-westerberg/perl/ch-1.pl | 19 | ||||
| -rwxr-xr-x | challenge-039/ruben-westerberg/perl/ch-2.pl | 30 | ||||
| -rwxr-xr-x | challenge-039/ruben-westerberg/raku/ch-1.p6 | 20 | ||||
| -rwxr-xr-x | challenge-039/ruben-westerberg/raku/ch-2.p6 | 25 |
5 files changed, 97 insertions, 2 deletions
diff --git a/challenge-039/ruben-westerberg/README b/challenge-039/ruben-westerberg/README index eabb2c8160..ec2a5fe038 100644 --- a/challenge-039/ruben-westerberg/README +++ b/challenge-039/ruben-westerberg/README @@ -2,11 +2,12 @@ Solution by Ruben Westerberg ch-1.pl and ch-1.p6 =================== -Run the program with at least 1 command line argument (7 digit number) to validated and generate a date for each argument. +Run program to process guest log and display the amount of time lights are on ch-2.pl and ch-2.p6 =================== -Run the program to randomly select 7 tiles from a bag and display the possible words and associated score which could be created from the 7 tiles +Run the program with a RPN formated expression ( + - * / supported) as an argument (don't forget to quote). +Output is the result of the RPN expression. A default expression is used if no arguments are present diff --git a/challenge-039/ruben-westerberg/perl/ch-1.pl b/challenge-039/ruben-westerberg/perl/ch-1.pl new file mode 100755 index 0000000000..c56b887697 --- /dev/null +++ b/challenge-039/ruben-westerberg/perl/ch-1.pl @@ -0,0 +1,19 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use List::Util qw<min max>; + +my @times=map { my @o;while(/(\d{2}):(\d{2})/g){ push @o,$1*60+$2}; @o} <DATA>; +printf "Lights on for %d minutes\n", max(@times)-min(@times); + +__DATA__ +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/ruben-westerberg/perl/ch-2.pl b/challenge-039/ruben-westerberg/perl/ch-2.pl new file mode 100755 index 0000000000..db2f6f66ca --- /dev/null +++ b/challenge-039/ruben-westerberg/perl/ch-2.pl @@ -0,0 +1,30 @@ +#!/usr/bin/env perl + +my $expression=$ARGV[0]//"15 7 1 1 + - / 3 * 2 1 1 + + -"; +my @stack; +$expression=~s/ +/ /g; +print "Input expression: $expression\n"; +for (split " ", $expression) { + die "Error in input expression" if !/^[\-+]?\d+(\.\d+)*$/ && !/^[+\-*\/]$/; + for ($_) { + if ($_ eq "+") { + push @stack, pop(@stack)+ pop(@stack); + last; + } + if ($_ eq "-") { + push @stack, pop(@stack)-pop(@stack); + last; + } + if ($_ eq "*") { + push @stack, pop(@stack)*pop(@stack); + last; + } + if ($_ eq "/") { + push @stack, pop(@stack)/pop(@stack); + last; + } + push @stack, $_; + + } +} +print "Result: @stack\n"; diff --git a/challenge-039/ruben-westerberg/raku/ch-1.p6 b/challenge-039/ruben-westerberg/raku/ch-1.p6 new file mode 100755 index 0000000000..2dcc61c96e --- /dev/null +++ b/challenge-039/ruben-westerberg/raku/ch-1.p6 @@ -0,0 +1,20 @@ +#!/usr/bin/env perl6 + +my @times=DATA().map({ |(for (m:g/(\d**2)\:(\d**2)/) {$_[0]*60+$_[1]*1 });}); +put sprintf "Lights on for %d minutes", @times.max-@times.min; + + +sub DATA () { + my $d=q:to/END/, +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 +END + return $d.lines; +} diff --git a/challenge-039/ruben-westerberg/raku/ch-2.p6 b/challenge-039/ruben-westerberg/raku/ch-2.p6 new file mode 100755 index 0000000000..db9f5a57cc --- /dev/null +++ b/challenge-039/ruben-westerberg/raku/ch-2.p6 @@ -0,0 +1,25 @@ +#!/usr/bin/env perl6 +# +my $expression=@*ARGS[0]//"15 7 1 1 + - / 3 * 2 1 1 + + -"; +my @stack; +$expression ~~ s:g/\s+/ /; +put "Input expression: $expression"; +for $expression.comb: /\S+/ { + die "Error in input expression" if ! /^<[\-\+]>?\d+(\.\d+)*$/ && !/^<[\+\-\*\/]>$/; + when $_ eq "+" { + push(@stack, pop(@stack)+ pop(@stack)); + } + when $_ eq "-" { + push(@stack, pop(@stack)-pop(@stack)); + } + when $_ eq "*" { + push(@stack, pop(@stack)*pop(@stack)); + } + when $_ eq "/" { + push(@stack, pop(@stack)/pop(@stack)); + } + default { + push @stack, $_; + } +} +put "Result: @stack[]"; |
