aboutsummaryrefslogtreecommitdiff
path: root/challenge-039
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2019-12-16 15:03:28 +0000
committerRoger Bell_West <roger@firedrake.org>2019-12-16 15:03:28 +0000
commitcfc5b6e8331b4a823b7aebbc89c54690e2267e86 (patch)
tree44c02d26d8da566de12cae386e7e8112795eca2f /challenge-039
parenta9ed4a36080d914afd2e2c6cf7da53c05d3a8bfc (diff)
downloadperlweeklychallenge-club-cfc5b6e8331b4a823b7aebbc89c54690e2267e86.tar.gz
perlweeklychallenge-club-cfc5b6e8331b4a823b7aebbc89c54690e2267e86.tar.bz2
perlweeklychallenge-club-cfc5b6e8331b4a823b7aebbc89c54690e2267e86.zip
Solutions for challenge #39
Diffstat (limited to 'challenge-039')
-rw-r--r--challenge-039/roger-bell-west/data19
-rwxr-xr-xchallenge-039/roger-bell-west/perl5/ch-1.pl32
-rwxr-xr-xchallenge-039/roger-bell-west/perl5/ch-2.pl64
-rwxr-xr-xchallenge-039/roger-bell-west/perl6/ch-1.p629
-rwxr-xr-xchallenge-039/roger-bell-west/perl6/ch-2.p661
5 files changed, 195 insertions, 0 deletions
diff --git a/challenge-039/roger-bell-west/data1 b/challenge-039/roger-bell-west/data1
new file mode 100644
index 0000000000..a2467461cd
--- /dev/null
+++ b/challenge-039/roger-bell-west/data1
@@ -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/roger-bell-west/perl5/ch-1.pl b/challenge-039/roger-bell-west/perl5/ch-1.pl
new file mode 100755
index 0000000000..1e3b668e8b
--- /dev/null
+++ b/challenge-039/roger-bell-west/perl5/ch-1.pl
@@ -0,0 +1,32 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my %ev;
+
+open I,'<','data1';
+while (<I>) {
+ chomp;
+ my @e=$_ =~ /(IN|OUT): (\d+):(\d+)/g;
+ while (@e) {
+ my $delta=(shift @e eq 'IN')?1:-1;
+ my $t=(60*shift @e)+shift @e;
+ $ev{$t}+=$delta;
+ }
+}
+
+my $ontime=0;
+my $occ=0;
+my $laston=0;
+foreach my $t (sort {$a <=> $b} keys %ev) {
+ my $lastocc=$occ;
+ $occ+=$ev{$t};
+ if ($lastocc==0 && $occ>0) {
+ $laston=$t;
+ } elsif ($lastocc>0 && $occ==0) {
+ $ontime+=($t-$laston);
+ }
+}
+
+print "$ontime\n";
diff --git a/challenge-039/roger-bell-west/perl5/ch-2.pl b/challenge-039/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..133f0b7fc6
--- /dev/null
+++ b/challenge-039/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,64 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my @stack=();
+
+my %op=(
+ add => \&add,
+ '+' => \&add,
+ sub => \&sub,
+ '-' => \&sub,
+ mul => \&mul,
+ '*' => \&mul,
+ div => \&div,
+ '/' => \&div,
+ neg => \&neg,
+ dup => \&dup,
+ pop => \&pop,
+ exch => \&exch,
+ );
+
+foreach my $p (@ARGV) {
+ if (exists $op{$p}) {
+ $op{$p}->();
+ } elsif ($p =~ /^[.0-9]+$/) {
+ push @stack,$p;
+ } else {
+ die "Unknown input $p\n";
+ }
+ print join(' ',@stack),"\n";
+}
+
+sub add {
+ push @stack,(pop @stack) + (pop @stack);
+}
+
+sub sub {
+ push @stack,-((pop @stack) - (pop @stack));
+}
+
+sub mul {
+ push @stack,(pop @stack) * (pop @stack);
+}
+
+sub div {
+ push @stack,1/((pop @stack) / (pop @stack));
+}
+
+sub neg {
+ push @stack,-(pop @stack);
+}
+
+sub dup {
+ push @stack,$stack[-1];
+}
+
+sub pop {
+ pop @stack;
+}
+
+sub exch {
+ ($stack[-1],$stack[-2])=($stack[-2],$stack[-1]);
+}
diff --git a/challenge-039/roger-bell-west/perl6/ch-1.p6 b/challenge-039/roger-bell-west/perl6/ch-1.p6
new file mode 100755
index 0000000000..3b868cba27
--- /dev/null
+++ b/challenge-039/roger-bell-west/perl6/ch-1.p6
@@ -0,0 +1,29 @@
+#! /usr/bin/perl6
+
+my %ev;
+
+my $fh=open :r,'data1';
+for $fh.lines {
+ my @e=($_ ~~ m:g/(IN|OUT) ':' \s* (\d+) ':' (\d+)/);
+ while (@e) {
+ my @match=@e.shift.values;
+ my $delta=(@match.shift eq 'IN')??1!!-1;
+ my $t=(60*@match.shift)+@match.shift;
+ %ev{$t}+=$delta;
+ }
+}
+
+my $ontime=0;
+my $occ=0;
+my $laston=0;
+for (%ev.keys.sort({$^a <=> $^b})) -> $t {
+ my $lastocc=$occ;
+ $occ+=%ev{$t};
+ if ($lastocc==0 && $occ>0) {
+ $laston=$t;
+ } elsif ($lastocc>0 && $occ==0) {
+ $ontime+=($t-$laston);
+ }
+}
+
+say $ontime;
diff --git a/challenge-039/roger-bell-west/perl6/ch-2.p6 b/challenge-039/roger-bell-west/perl6/ch-2.p6
new file mode 100755
index 0000000000..ab7252072d
--- /dev/null
+++ b/challenge-039/roger-bell-west/perl6/ch-2.p6
@@ -0,0 +1,61 @@
+#! /usr/bin/perl6
+
+my @stack=();
+
+my %op=(
+ add => &add,
+ '+' => &add,
+ sub => &sub,
+ '-' => &sub,
+ mul => &mul,
+ '*' => &mul,
+ div => &div,
+ '/' => &div,
+ neg => &neg,
+ dup => &dup,
+ pop => &pop,
+ exch => &exch,
+ );
+
+for @*ARGS -> $p {
+ if (%op{$p}:exists) {
+ %op{$p}.();
+ } elsif ($p ~~ /^<[.0..9]>+$/) {
+ push @stack,$p;
+ } else {
+ die "Unknown input $p\n";
+ }
+ say join(' ',@stack);
+}
+
+sub add {
+ push @stack,(@stack.pop) + (@stack.pop);
+}
+
+sub sub {
+ push @stack,-((@stack.pop) - (@stack.pop));
+}
+
+sub mul {
+ push @stack,(@stack.pop) * (@stack.pop);
+}
+
+sub div {
+ push @stack,1/((@stack.pop) / (@stack.pop));
+}
+
+sub neg {
+ push @stack,-(@stack.pop);
+}
+
+sub dup {
+ push @stack,@stack[* -1];
+}
+
+sub pop {
+ @stack.pop;
+}
+
+sub exch {
+ (@stack[* -1],@stack[* -2])=(@stack[* -2],@stack[* -1]);
+}