aboutsummaryrefslogtreecommitdiff
path: root/challenge-039
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-12-17 12:30:56 +0000
committerGitHub <noreply@github.com>2019-12-17 12:30:56 +0000
commitdf9b417744ded3eebc3caa98181b9604c215259d (patch)
treeb2ed20c46ab1b698b612c412ac456e938bc4f6e1 /challenge-039
parent7d48177fa10759d9bc029c45a86a8e3da53a7da6 (diff)
parentc3497f2ab3d29d8578be2f238823f0c25ee9d489 (diff)
downloadperlweeklychallenge-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/README5
-rwxr-xr-xchallenge-039/ruben-westerberg/perl/ch-1.pl19
-rwxr-xr-xchallenge-039/ruben-westerberg/perl/ch-2.pl30
-rwxr-xr-xchallenge-039/ruben-westerberg/raku/ch-1.p620
-rwxr-xr-xchallenge-039/ruben-westerberg/raku/ch-2.p625
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[]";