diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-12-16 15:45:17 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-12-16 15:45:17 +0000 |
| commit | fb375464dc26cc263b53fcdde2450e578bba8af9 (patch) | |
| tree | 6d590dc61c3cf72fafe20535b9d90d6a141dd228 | |
| parent | 492fba07de446fa8191dd258fc41feeb5663626a (diff) | |
| download | perlweeklychallenge-club-fb375464dc26cc263b53fcdde2450e578bba8af9.tar.gz perlweeklychallenge-club-fb375464dc26cc263b53fcdde2450e578bba8af9.tar.bz2 perlweeklychallenge-club-fb375464dc26cc263b53fcdde2450e578bba8af9.zip | |
- Added solutions by Javier Luque.
| -rw-r--r-- | challenge-039/javier-luque/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-039/javier-luque/perl5/ch-1.pl | 50 | ||||
| -rw-r--r-- | challenge-039/javier-luque/perl5/ch-2.pl | 41 | ||||
| -rw-r--r-- | challenge-039/javier-luque/perl6/ch-1.p6 | 50 | ||||
| -rw-r--r-- | challenge-039/javier-luque/perl6/ch-2.p6 | 40 | ||||
| -rw-r--r-- | stats/pwc-current.json | 107 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 88 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 614 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 546 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 90 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 84 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 116 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 96 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 44 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 52 |
15 files changed, 1112 insertions, 907 deletions
diff --git a/challenge-039/javier-luque/blog.txt b/challenge-039/javier-luque/blog.txt new file mode 100644 index 0000000000..f82e6c0106 --- /dev/null +++ b/challenge-039/javier-luque/blog.txt @@ -0,0 +1 @@ +https://perlchallenges.wordpress.com/2019/12/16/perl-weekly-challenge-039/ diff --git a/challenge-039/javier-luque/perl5/ch-1.pl b/challenge-039/javier-luque/perl5/ch-1.pl new file mode 100644 index 0000000000..cebe4a8e97 --- /dev/null +++ b/challenge-039/javier-luque/perl5/ch-1.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl +# Test: ./ch-1.pl +use strict; +use warnings; +use feature qw /say/; + +my $minutes_on = calculate_lights_on(); + +say 'Lights on for: ' . + $minutes_on . ' minutes'; + +# Calculate the minutes lights were on +sub calculate_lights_on { + my %time_on; # Sample in minutes + my $time_re = qr/\d{2}\:\d{2}/; + + while (my $line = <DATA>) { + next unless $line =~ + /.*?($time_re).*?($time_re)/; + + # Get the time in absolute minutes + my $t1 = absolute_minutes($1); + my $t2 = absolute_minutes($2); + + # Populate the time on hash + for my $minute ($t1 .. ($t2 - 1)) { + $time_on{$minute} = 1; + } + } + + return scalar(keys %time_on); +} + +# Convert to absolute mins. +sub absolute_minutes { + my ($hh, $mm) = split(':', shift); + return $hh * 60 + $mm; +} + + +__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/javier-luque/perl5/ch-2.pl b/challenge-039/javier-luque/perl5/ch-2.pl new file mode 100644 index 0000000000..b99196f376 --- /dev/null +++ b/challenge-039/javier-luque/perl5/ch-2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/perl +# test: ./ch-2.pl "15 7 1 1 + − ÷ 3 × 2 1 1 + + −" +use strict; +use warnings; +use feature qw /say/; + +say evaluate_stack($ARGV[0]); + +# Evaluate the stack +sub evaluate_stack { + my @tokens = split(/\s/, shift); + my @stack; + + # Some utf-8 friendly operations + my $operations = { + '+' => \&add, + '-' => \&subtract, + '−' => \&subtract, + '*' => \&multiply, + '×' => \&multiply, + '÷' => \÷, + '/' => \÷, + }; + + for my $token (@tokens) { + if ($operations->{$token}) { + push @stack, $operations->{$token}->(\@stack); + } elsif ($token =~ /\d+/) { + push @stack, $token; + } + } + + return pop(@stack); +} + +# Operations +sub add { my $s = shift; return pop(@$s) + pop(@$s) } +sub subtract { my $s = shift; return - pop(@$s) + pop(@$s) } +sub multiply { my $s = shift; return pop(@$s) * pop(@$s) } +sub divide { my $s = shift; return (1 / pop(@$s)) * pop(@$s) } + diff --git a/challenge-039/javier-luque/perl6/ch-1.p6 b/challenge-039/javier-luque/perl6/ch-1.p6 new file mode 100644 index 0000000000..7b6d1f9d54 --- /dev/null +++ b/challenge-039/javier-luque/perl6/ch-1.p6 @@ -0,0 +1,50 @@ +# Test: perl6 ch-1.p6 +use v6.d; + +sub MAIN() { + my $minutes_on = calculate-lights-on(); + + say 'Lights on for: ' ~ + $minutes_on ~ + ' minutes'; +} + +# Calculate the minutes lights were on +sub calculate-lights-on { + my %time_on; # Sample in minutes + my $time_re = /\d\d\:\d\d/; + + for data().lines -> $line { + next unless $line ~~ + /.*?($time_re).*?($time_re)/; + + # Get the time in absolute minutes + my $t1 = absolute-minutes($0); + my $t2 = absolute-minutes($1); + + %time_on{$t1 .. ($t2 -1)} = 1; + } + + return %time_on.elems; +} + +# Convert to absolute mins. +sub absolute-minutes($hh_mm) { + my ($hh, $mm) = $hh_mm.split(':'); + return $hh * 60 + $mm; +} + +# The data +sub data { + return 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 +} diff --git a/challenge-039/javier-luque/perl6/ch-2.p6 b/challenge-039/javier-luque/perl6/ch-2.p6 new file mode 100644 index 0000000000..a846e27fa2 --- /dev/null +++ b/challenge-039/javier-luque/perl6/ch-2.p6 @@ -0,0 +1,40 @@ +# Test: perl6 ./ch-2.p6 "15 7 1 1 + − ÷ 3 × 2 1 1 + + −" +use v6.d; + +sub MAIN (Str $tokens) { + say evaluate-stack($tokens.split(/\s/)); +} + +# Evaluate the stack +sub evaluate-stack(@tokens) { + my @stack; + + # Some utf-8 friendly operations + my %operations = ( + '+' => &add, + '-' => &subtract, + '−' => &subtract, + '*' => &multiply, + '×' => &multiply, + '÷' => ÷, + '/' => ÷, + ); + + # Process each token + for (@tokens) -> $token { + if (%operations.{$token}) { + push @stack, %operations.{$token}(@stack); + } elsif ($token ~~ /\d+/) { + push @stack, $token; + } + } + + # Return the answer + return pop(@stack); +} + +# Operations +sub add(@s) { return @s.pop + @s.pop } +sub subtract(@s) { return - @s.pop + @s.pop } +sub multiply(@s) { return @s.pop * @s.pop } +sub divide(@s) { return (1 / @s.pop) * @s.pop } diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 0f0e966203..d0c6052d1e 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,11 +1,40 @@ { - "tooltip" : { - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "followPointer" : 1, - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" - }, "subtitle" : { - "text" : "[Champions: 2] Last updated at 2019-12-16 15:38:33 GMT" + "text" : "[Champions: 3] Last updated at 2019-12-16 15:45:06 GMT" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "chart" : { + "type" : "column" + }, + "series" : [ + { + "colorByPoint" : 1, + "data" : [ + { + "drilldown" : "Javier Luque", + "name" : "Javier Luque", + "y" : 5 + }, + { + "y" : 4, + "name" : "Roger Bell West", + "drilldown" : "Roger Bell West" + }, + { + "drilldown" : "Steven Wilson", + "name" : "Steven Wilson", + "y" : 2 + } + ], + "name" : "Perl Weekly Challenge - 039" + } + ], + "legend" : { + "enabled" : 0 }, "plotOptions" : { "series" : { @@ -16,11 +45,36 @@ } } }, + "tooltip" : { + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", + "followPointer" : 1 + }, + "xAxis" : { + "type" : "category" + }, "drilldown" : { "series" : [ { + "name" : "Javier Luque", + "data" : [ + [ + "Perl 5", + 2 + ], + [ + "Perl 6", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Javier Luque" + }, + { "name" : "Roger Bell West", - "id" : "Roger Bell West", "data" : [ [ "Perl 5", @@ -30,53 +84,22 @@ "Perl 6", 2 ] - ] + ], + "id" : "Roger Bell West" }, { "id" : "Steven Wilson", - "name" : "Steven Wilson", "data" : [ [ "Perl 5", 2 ] - ] + ], + "name" : "Steven Wilson" } ] }, - "chart" : { - "type" : "column" - }, - "legend" : { - "enabled" : 0 - }, - "xAxis" : { - "type" : "category" - }, "title" : { "text" : "Perl Weekly Challenge - 039" - }, - "series" : [ - { - "data" : [ - { - "name" : "Roger Bell West", - "drilldown" : "Roger Bell West", - "y" : 4 - }, - { - "name" : "Steven Wilson", - "drilldown" : "Steven Wilson", - "y" : 2 - } - ], - "name" : "Perl Weekly Challenge - 039", - "colorByPoint" : 1 - } - ], - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index e502d66ef9..1542b2dfc3 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,43 +1,12 @@ { - "series" : [ - { - "dataLabels" : { - "y" : 10, - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - }, - "align" : "right", - "format" : "{point.y:.0f}", - "enabled" : "true", - "color" : "#FFFFFF", - "rotation" : -90 - }, - "name" : "Contributions", - "data" : [ - [ - "Blog", - 412 - ], - [ - "Perl 5", - 1582 - ], - [ - "Perl 6", - 945 - ] - ] - } - ], - "legend" : { - "enabled" : "false" - }, - "chart" : { - "type" : "column" - }, "subtitle" : { - "text" : "Last updated at 2019-12-16 15:38:46 GMT" + "text" : "Last updated at 2019-12-16 15:45:13 GMT" + }, + "yAxis" : { + "title" : { + "text" : null + }, + "min" : 0 }, "title" : { "text" : "Perl Weekly Challenge Contributions - 2019" @@ -51,13 +20,44 @@ } } }, - "yAxis" : { - "min" : 0, - "title" : { - "text" : null - } + "chart" : { + "type" : "column" + }, + "legend" : { + "enabled" : "false" }, "tooltip" : { "pointFormat" : "<b>{point.y:.0f}</b>" - } + }, + "series" : [ + { + "data" : [ + [ + "Blog", + 413 + ], + [ + "Perl 5", + 1584 + ], + [ + "Perl 6", + 947 + ] + ], + "name" : "Contributions", + "dataLabels" : { + "enabled" : "true", + "rotation" : -90, + "color" : "#FFFFFF", + "align" : "right", + "y" : 10, + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + }, + "format" : "{point.y:.0f}" + } + } + ] } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 732f9aca78..7ba4934c88 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,12 +1,241 @@ { + "series" : [ + { + "data" : [ + { + "y" : 136, + "drilldown" : "001", + "name" : "#001" + }, + { + "name" : "#002", + "drilldown" : "002", + "y" : 104 + }, + { + "y" : 67, + "drilldown" : "003", + "name" : "#003" + }, + { + "name" : "#004", + "drilldown" : "004", + "y" : 87 + }, + { + "drilldown" : "005", + "name" : "#005", + "y" : 67 + }, + { + "y" : 48, + "name" : "#006", + "drilldown" : "006" + }, + { + "drilldown" : "007", + "name" : "#007", + "y" : 56 + }, + { + "y" : 70, + "name" : "#008", + "drilldown" : "008" + }, + { + "drilldown" : "009", + "name" : "#009", + "y" : 68 + }, + { + "drilldown" : "010", + "name" : "#010", + "y" : 60 + }, + { + "y" : 79, + "drilldown" : "011", + "name" : "#011" + }, + { + "name" : "#012", + "drilldown" : "012", + "y" : 83 + }, + { + "name" : "#013", + "drilldown" : "013", + "y" : 76 + }, + { + "name" : "#014", + "drilldown" : "014", + "y" : 96 + }, + { + "name" : "#015", + "drilldown" : "015", + "y" : 93 + }, + { + "name" : "#016", + "drilldown" : "016", + "y" : 66 + }, + { + "y" : 79, + "drilldown" : "017", + "name" : "#017" + }, + { + "name" : "#018", + "drilldown" : "018", + "y" : 76 + }, + { + "y" : 95, + "drilldown" : "019", + "name" : "#019" + }, + { + "y" : 95, + "name" : "#020", + "drilldown" : "020" + }, + { + "drilldown" : "021", + "name" : "#021", + "y" : 67 + }, + { + "drilldown" : "022", + "name" : "#022", + "y" : 63 + }, + { + "name" : "#023", + "drilldown" : "023", + "y" : 91 + }, + { + "name" : "#024", + "drilldown" : "024", + "y" : 70 + }, + { + "y" : 55, + "name" : "#025", + "drilldown" : "025" + }, + { + "y" : 70, + "name" : "#026", + "drilldown" : "026" + }, + { + "drilldown" : "027", + "name" : "#027", + "y" : 58 + }, + { + "name" : "#028", + "drilldown" : "028", + "y" : 78 + }, + { + "drilldown" : "029", + "name" : "#029", + "y" : 77 + }, + { + "y" : 115, + "name" : "#030", + "drilldown" : "030" + }, + { + "y" : 87, + "name" : "#031", + "drilldown" : "031" + }, + { + "y" : 92, + "drilldown" : "032", + "name" : "#032" + }, + { + "y" : 108, + "name" : "#033", + "drilldown" : "033" + }, + { + "name" : "#034", + "drilldown" : "034", + "y" : 60 + }, + { + "drilldown" : "035", + "name" : "#035", + "y" : 60 + }, + { + "y" : 61, + "name" : "#036", + "drilldown" : "036" + }, + { + "name" : "#037", + "drilldown" : "037", + "y" : 62 + }, + { + "name" : "#038", + "drilldown" : "038", + "y" : 58 + }, + { + "y" : 11, + "drilldown" : "039", + "name" : "#039" + } + ], + "colorByPoint" : "true", + "name" : "Perl Weekly Challenge Languages" + } + ], + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } + } + }, + "tooltip" : { + "followPointer" : "true", + "pointFormat" : "<span style=\"color:{point.color}\">Challenge {point.name}</span>: <b>{point.y:f}</b><br/>", + "headerFormat" : "<span style=\"font-size:11px\"></span>" + }, "legend" : { "enabled" : "false" }, + "chart" : { + "type" : "column" + }, + "title" : { + "text" : "Perl Weekly Challenge Language" + }, + "xAxis" : { + "type" : "category" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, "drilldown" : { "series" : [ { - "name" : "001", - "id" : "001", "data" : [ [ "Perl 5", @@ -20,9 +249,12 @@ "Blog", 11 ] - ] + ], + "name" : "001", + "id" : "001" }, { + "id" : "002", "data" : [ [ "Perl 5", @@ -37,10 +269,10 @@ 9 ] ], - "id" : "002", "name" : "002" }, { + "id" : "003", "data" : [ [ "Perl 5", @@ -55,11 +287,9 @@ 9 ] ], - "id" : "003", "name" : "003" }, { - "name" : "004", "id" : "004", "data" : [ [ @@ -74,11 +304,10 @@ "Blog", 10 ] - ] + ], + "name" : "004" }, { - "name" : "005", - "id" : "005", "data" : [ [ "Perl 5", @@ -92,11 +321,11 @@ "Blog", 12 ] - ] + ], + "name" : "005", + "id" : "005" }, { - "name" : "006", - "id" : "006", "data" : [ [ "Perl 5", @@ -110,7 +339,9 @@ "Blog", 7 ] - ] + ], + "name" : "006", + "id" : "006" }, { "data" : [ @@ -127,11 +358,11 @@ 10 ] ], - "id" : "007", - "name" : "007" + "name" : "007", + "id" : "007" }, { - "name" : "008", + "id" : "008", "data" : [ [ "Perl 5", @@ -146,10 +377,9 @@ 12 ] ], - "id" : "008" + "name" : "008" }, { - "id" : "009", "data" : [ [ "Perl 5", @@ -164,10 +394,10 @@ 13 ] ], - "name" : "009" + "name" : "009", + "id" : "009" }, { - "id" : "010", "data" : [ [ "Perl 5", @@ -182,11 +412,12 @@ 11 ] ], - "name" : "010" + "name" : "010", + "id" : "010" }, { - "name" : "011", "id" : "011", + "name" : "011", "data" : [ [ "Perl 5", @@ -204,6 +435,7 @@ }, { "id" : "012", + "name" : "012", "data" : [ [ "Perl 5", @@ -217,11 +449,10 @@ "Blog", 11 ] - ], - "name" : "012" + ] }, { - "name" : "013", + "id" : "013", "data" : [ [ "Perl 5", @@ -236,9 +467,10 @@ 13 ] ], - "id" : "013" + "name" : "013" }, { + "id" : "014", "name" : "014", "data" : [ [ @@ -253,12 +485,10 @@ "Blog", 15 ] - ], - "id" : "014" + ] }, { "name" : "015", - "id" : "015", "data" : [ [ "Perl 5", @@ -272,9 +502,11 @@ "Blog", 15 ] - ] + ], + "id" : "015" }, { + "id" : "016", "data" : [ [ "Perl 5", @@ -289,11 +521,9 @@ 12 ] ], - "id" : "016", "name" : "016" }, { - "name" : "017", "id" : "017", "data" : [ [ @@ -308,11 +538,12 @@ "Blog", 12 ] - ] + ], + "name" : "017" }, { - "name" : "018", "id" : "018", + "name" : "018", "data" : [ [ "Perl 5", @@ -347,7 +578,6 @@ "id" : "019" }, { - "id" : "020", "data" : [ [ "Perl 5", @@ -362,11 +592,10 @@ 13 ] ], - "name" : "020" + "name" : "020", + "id" : "020" }, { - "name" : "021", - "id" : "021", "data" : [ [ "Perl 5", @@ -380,9 +609,12 @@ "Blog", 10 ] - ] + ], + "name" : "021", + "id" : "021" }, { + "id" : "022", "name" : "022", "data" : [ [ @@ -397,12 +629,9 @@ "Blog", 10 ] - ], - "id" : "022" + ] }, { - "name" : "023", - "id" : "023", "data" : [ [ "Perl 5", @@ -416,10 +645,11 @@ "Blog", 12 ] - ] + ], + "name" : "023", + "id" : "023" }, { - "name" : "024", "id" : "024", "data" : [ [ @@ -434,11 +664,11 @@ "Blog", 11 ] - ] + ], + "name" : "024" }, { "name" : "025", - "id" : "025", "data" : [ [ "Perl 5", @@ -452,11 +682,12 @@ "Blog", 12 ] - ] + ], + "id" : "025" }, { - "name" : "026", "id" : "026", + "name" : "026", "data" : [ [ "Perl 5", @@ -474,6 +705,7 @@ }, { "id" : "027", + "name" : "027", "data" : [ [ "Perl 5", @@ -487,11 +719,9 @@ "Blog", 9 ] - ], - "name" : "027" + ] }, { - "id" : "028", "data" : [ [ "Perl 5", @@ -506,9 +736,12 @@ 9 ] ], - "name" : "028" + "name" : "028", + "id" : "028" }, { + "id" : "029", + "name" : "029", "data" : [ [ "Perl 5", @@ -522,13 +755,11 @@ "Blog", 12 ] - ], - "id" : "029", - "name" : "029" + ] }, { - "name" : "030", "id" : "030", + "name" : "030", "data" : [ [ "Perl 5", @@ -545,7 +776,6 @@ ] }, { - "name" : "031", "id" : "031", "data" : [ [ @@ -560,9 +790,11 @@ "Blog", 9 ] - ] + ], + "name" : "031" }, { + "id" : "032", "name" : "032", "data" : [ [ @@ -577,11 +809,9 @@ "Blog", 10 ] - ], - "id" : "032" + ] }, { - "name" : "033", "id" : "033", "data" : [ [ @@ -596,7 +826,8 @@ "Blog", 10 ] - ] + ], + "name" : "033" }, { "name" : "034", @@ -617,8 +848,6 @@ |
