diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-11-08 19:38:11 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-11-08 19:38:11 +0000 |
| commit | 85079d2c7bd184953301ee9d0c1a22520141e7af (patch) | |
| tree | 15e4e8e94d40580afdc28e82c36209ca92fe96e9 | |
| parent | d7daa561a2e8dbffa51013b1d6ea9723eda30c25 (diff) | |
| download | perlweeklychallenge-club-85079d2c7bd184953301ee9d0c1a22520141e7af.tar.gz perlweeklychallenge-club-85079d2c7bd184953301ee9d0c1a22520141e7af.tar.bz2 perlweeklychallenge-club-85079d2c7bd184953301ee9d0c1a22520141e7af.zip | |
- Added solutions by Peter Campbell Smith.
| -rwxr-xr-x | challenge-138/peter-campbell-smith/perl/ch-1.pl | 52 | ||||
| -rwxr-xr-x | challenge-138/peter-campbell-smith/perl/ch-2.pl | 88 | ||||
| -rw-r--r-- | stats/pwc-current.json | 151 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 60 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 1002 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 746 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 118 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 102 | ||||
| -rw-r--r-- | stats/pwc-summary-151-180.json | 114 | ||||
| -rw-r--r-- | stats/pwc-summary-181-210.json | 28 | ||||
| -rw-r--r-- | stats/pwc-summary-211-240.json | 102 | ||||
| -rw-r--r-- | stats/pwc-summary-241-270.json | 60 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 20 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 34 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 28 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 522 |
16 files changed, 1691 insertions, 1536 deletions
diff --git a/challenge-138/peter-campbell-smith/perl/ch-1.pl b/challenge-138/peter-campbell-smith/perl/ch-1.pl new file mode 100755 index 0000000000..f346c7be46 --- /dev/null +++ b/challenge-138/peter-campbell-smith/perl/ch-1.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl + +# Peter Campbell Smith - 2021-11-08 +# PWC 138 task 1 + +use v5.20; +use warnings; +use strict; + +# You are given a year in 4-digits form. +# Write a script to calculate the total number of workdays in the given year. +# For the task, we consider, Monday - Friday as workdays. + +# Discussion: A non-leap year contains 52 weeks and one day (52 * 7 + 1 = 365). +# 52 weeks between 1 January and 30 December will contain 52 * 5 = 260 working days. +# If 31 December is a working day then the year will contain 261 working days, +# and if it isn't, then the year will contain just 260. +# +# A leap year contains 52 weeks and 2 days, so similarly the number of working days +# in the year is 260 plus 1 if 30 December is a working day and plus another +# 1 if 31 December is a working day. + +my ($year, @years, $working_days); + +use Time::Local; + +@years = (2010 .. 2030); + +for $year (@years) { + $working_days = 5 * 52; + $working_days++ if is_working_day($year, 12, 31); + $working_days++ if (is_leap($year) and is_working_day($year, 12, 30)); + say qq[Input: \$year = $year\nOutput: $working_days\n]; +} + +sub is_working_day { # ($year, $month, $day) + + # returns 1 if date is a working day, else returns 0 + # s m h d m y + my @t = localtime(timelocal(0, 0, 12, $_[2], $_[1] - 1, $_[0] - 1900)); + return ($t[6] >= 1 and $t[6] <= 5) ? 1 : 0; +} + +sub is_leap { + + # returns 1 if given year is leap or 0 if not + my ($test); + + $test = $_[0]; + $test = $test / 100 if $test % 100 == 0; # xx00 years + return $test % 4 == 0 ? 1 : 0; +}
\ No newline at end of file diff --git a/challenge-138/peter-campbell-smith/perl/ch-2.pl b/challenge-138/peter-campbell-smith/perl/ch-2.pl new file mode 100755 index 0000000000..600e5d46da --- /dev/null +++ b/challenge-138/peter-campbell-smith/perl/ch-2.pl @@ -0,0 +1,88 @@ +#!/usr/bin/perl + +# Peter Campbell Smith - 2021-11-08 +# PWC 138 task 2 + +use v5.20; +use warnings; +use strict; + +# You are given a perfect square. +# Write a script to figure out if the square root of the given number is +# same as the sum of 2 or more splits of the given number, eg sqrt(9801) = 98 + 0 + 1 = 99 + +# Discussion: The tricky requirement is to generate all the splits of a +# multi-digit number (eg 123456). Consider the number as a string of n digits. +# Consider also a binary number with n - 1 digits (eg 01101). If we generate +# all such binary numers, and consider each bit to represent whether the +# corresponding digit in the split is followed by ' + ', we can generate +# all the splits. So for example 123456 and 01101 yields 12 + 3 + 45 + 6: +# a plus has been inserted after the first, second and fifth digits of n +# because the first, second and fifth bits of the binary number are 1. +# +# Once you have all the splits you can 'eval' them to get the sum, and compare +# it with sqrt(n). +# +# There is one slight catch. If n contains am embedded 0 (eg 123056) then +# you will get splits like 123 + 056. Perl regards 056 as octal 56, so it +# is necessary to remove these leading zeroes before the eval. + +my (@squares, $square, $root, $gaps, $plus_map, $position, $result, $sum, $since, $good, + $legend0, $legend1, $result2); + +# test values +@squares = (81, 9801, 36**2, 45**2, 55**2, 82**2, 91**2, 92**2, 777**2); + +# loop over test values +for $square (@squares) { + + # check it really is a sqare + $root = sqrt($square); + say qq[Input: $square ($root ** 2)]; + if ($root != int($root) or $square < 10) { + say qq[$square is not an integer square >= 10\n]; + next; + } + + # initialisation + $gaps = length($square) - 1; # no of gaps where we could insert a + + $good = 0; + $since = ''; + $legend1 = qq[Output: 1\nsince]; + $legend0 = qq[Output: 0\nsince]; + + # loop over binary numbers eg if $gaps == 6, from 000001 to 111111 + for $plus_map (1 .. 2 ** $gaps - 1) { + + # create a string containing pluses in the appropriate places (eg 123 + 456) + $result = ''; + for $position (0 .. $gaps) { + $result .= substr($square, $position, 1); + if ($plus_map & (2 ** $position)) { # use bitwise & to isolate the appropriate bit + $result .= ' + '; + } + } + + # need to avoid constructs like + 012 as perl regards 012 as an octal number + $result2 = $result; + $result2 =~ s| 0(\d)| $1|g; + + # evaluate the string + $sum = eval($result2); + + # good result - sums to the root of the original number - show it + if ($sum == $root) { + say qq[$legend1 $result == $sum]; + $good = 1; + $legend1 = 'and '; + + # bad result - it doesn't; keep this in $since in case no good result is found + } else { + $since .= qq[$legend0 $result == $sum != $root\n]; + $legend0 = 'and '; + } + } + + # if there were no good results, list the bad ones + print $good ? qq[\n] : qq[$since\n]; +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index ce3581e3b7..4ace860e15 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,70 +1,17 @@ { - "title" : { - "text" : "The Weekly Challenge - 138" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "series" : [ - { - "colorByPoint" : 1, - "data" : [ - { - "name" : "Andrew Shitov", - "y" : 1, - "drilldown" : "Andrew Shitov" - }, - { - "name" : "Luca Ferrari", - "y" : 6, - "drilldown" : "Luca Ferrari" - }, - { - "name" : "Mark Anderson", - "y" : 2, - "drilldown" : "Mark Anderson" - }, - { - "name" : "Paulo Custodio", - "y" : 2, - "drilldown" : "Paulo Custodio" - }, - { - "drilldown" : "Roger Bell_West", - "y" : 4, - "name" : "Roger Bell_West" - } - ], - "name" : "The Weekly Challenge - 138" - } - ], - "chart" : { - "type" : "column" - }, - "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/>" - }, - "legend" : { - "enabled" : 0 - }, "drilldown" : { "series" : [ { - "name" : "Andrew Shitov", "id" : "Andrew Shitov", "data" : [ [ "Raku", 1 ] - ] + ], + "name" : "Andrew Shitov" }, { - "name" : "Luca Ferrari", "id" : "Luca Ferrari", "data" : [ [ @@ -75,11 +22,12 @@ "Blog", 4 ] - ] + ], + "name" : "Luca Ferrari" }, { - "name" : "Mark Anderson", "id" : "Mark Anderson", + "name" : "Mark Anderson", "data" : [ [ "Raku", @@ -88,16 +36,27 @@ ] }, { + "id" : "Paulo Custodio", "data" : [ [ "Perl", 2 ] ], - "id" : "Paulo Custodio", "name" : "Paulo Custodio" }, { + "name" : "Peter Campbell Smith", + "data" : [ + [ + "Perl", + 2 + ] + ], + "id" : "Peter Campbell Smith" + }, + { + "id" : "Roger Bell_West", "data" : [ [ "Perl", @@ -108,24 +67,80 @@ 2 ] ], - "id" : "Roger Bell_West", "name" : "Roger Bell_West" } ] }, + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + } + } + }, + "title" : { + "text" : "The Weekly Challenge - 138" + }, + "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: 5] Last updated at 2021-11-08 19:31:03 GMT" + "text" : "[Champions: 6] Last updated at 2021-11-08 19:37:01 GMT" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } }, "xAxis" : { "type" : "category" }, - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 + "legend" : { + "enabled" : 0 + }, + "chart" : { + "type" : "column" + }, + "series" : [ + { + "colorByPoint" : 1, + "data" : [ + { + "name" : "Andrew Shitov", + "drilldown" : "Andrew Shitov", + "y" : 1 + }, + { + "y" : 6, + "drilldown" : "Luca Ferrari", + "name" : "Luca Ferrari" + }, + { + "y" : 2, + "drilldown" : "Mark Anderson", + "name" : "Mark Anderson" + }, + { + "name" : "Paulo Custodio", + "drilldown" : "Paulo Custodio", + "y" : 2 + }, + { + "y" : 2, + "drilldown" : "Peter Campbell Smith", + "name" : "Peter Campbell Smith" + }, + { + "name" : "Roger Bell_West", + "y" : 4, + "drilldown" : "Roger Bell_West" + } + ], + "name" : "The Weekly Challenge - 138" } - } + ] } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index eaf9c5f6c6..66a5e12ec8 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,18 +1,31 @@ { - "title" : { - "text" : "The Weekly Challenge Contributions [2019 - 2021]" - }, "yAxis" : { - "min" : 0, "title" : { "text" : null + }, + "min" : 0 + }, + "xAxis" : { + "type" : "category", + "labels" : { + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } } }, - "chart" : { - "type" : "column" + "subtitle" : { + "text" : "Last updated at 2021-11-08 19:37:00 GMT" + }, + "tooltip" : { + "pointFormat" : "<b>{point.y:.0f}</b>" + }, + "title" : { + "text" : "The Weekly Challenge Contributions [2019 - 2021]" }, "series" : [ { + "name" : "Contributions", "data" : [ [ "Blog", @@ -20,7 +33,7 @@ ], [ "Perl", - 6587 + 6589 ], [ "Raku", @@ -28,36 +41,23 @@ ] ], "dataLabels" : { - "rotation" : -90, "enabled" : "true", - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - }, "y" : 10, - "format" : "{point.y:.0f}", + "color" : "#FFFFFF", + "rotation" : -90, "align" : "right", - "color" : "#FFFFFF" - }, - "name" : "Contributions" + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + }, + "format" : "{point.y:.0f}" + } } ], - "tooltip" : { - "pointFormat" : "<b>{point.y:.0f}</b>" - }, "legend" : { "enabled" : "false" }, - "subtitle" : { - "text" : "Last updated at 2021-11-08 19:31:03 GMT" - }, - "xAxis" : { - "type" : "category", - "labels" : { - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - } - } + "chart" : { + "type" : "column" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 0930114efa..6f0352b752 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,15 +1,14 @@ { - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } + "legend" : { + "enabled" : "false" }, - "title" : { - "text" : "The Weekly Challenge Language" + "chart" : { + "type" : "column" }, "series" : [ { "colorByPoint" : "true", + "name" : "The Weekly Challenge Languages", "data" : [ { "name" : "#001", @@ -17,38 +16,38 @@ "drilldown" : "001" }, { + "name" : "#002", "drilldown" : "002", - "y" : 125, - "name" : "#002" + "y" : 125 }, { - "name" : "#003", + "drilldown" : "003", "y" : 81, - "drilldown" : "003" + "name" : "#003" }, { - "y" : 99, "name" : "#004", + "y" : 99, "drilldown" : "004" }, { - "drilldown" : "005", "name" : "#005", - "y" : 78 + "y" : 78, + "drilldown" : "005" }, { - "name" : "#006", "y" : 58, - "drilldown" : "006" + "drilldown" : "006", + "name" : "#006" }, { + "name" : "#007", "drilldown" : "007", - "y" : 64, - "name" : "#007" + "y" : 64 }, { - "y" : 78, "name" : "#008", + "y" : 78, "drilldown" : "008" }, { @@ -58,158 +57,158 @@ }, { "drilldown" : "010", - "name" : "#010", - "y" : 65 + "y" : 65, + "name" : "#010" }, { - "drilldown" : "011", "name" : "#011", - "y" : 85 + "y" : 85, + "drilldown" : "011" }, { - "y" : 89, "name" : "#012", + "y" : 89, "drilldown" : "012" }, { "drilldown" : "013", - "name" : "#013", - "y" : 85 + "y" : 85, + "name" : "#013" }, { + "y" : 101, "drilldown" : "014", - "name" : "#014", - "y" : 101 + "name" : "#014" }, { - "y" : 99, "name" : "#015", - "drilldown" : "015" + "drilldown" : "015", + "y" : 99 }, { + "drilldown" : "016", "y" : 71, - "name" : "#016", - "drilldown" : "016" + "name" : "#016" }, { "drilldown" : "017", - "name" : "#017", - "y" : 84 + "y" : 84, + "name" : "#017" }, { - "drilldown" : "018", + "name" : "#018", "y" : 81, - "name" : "#018" + "drilldown" : "018" }, { - "drilldown" : "019", + "name" : "#019", "y" : 103, - "name" : "#019" + "drilldown" : "019" }, { "name" : "#020", - "y" : 101, - "drilldown" : "020" + "drilldown" : "020", + "y" : 101 }, { - "drilldown" : "021", + "name" : "#021", "y" : 72, - "name" : "#021" + "drilldown" : "021" }, { "drilldown" : "022", - "name" : "#022", - "y" : 68 + "y" : 68, + "name" : "#022" }, { - "name" : "#023", + "drilldown" : "023", "y" : 97, - "drilldown" : "023" + "name" : "#023" }, { "drilldown" : "024", - "name" : "#024", - "y" : 75 + "y" : 75, + "name" : "#024" }, { "drilldown" : "025", - "name" : "#025", - "y" : 59 + "y" : 59, + "name" : "#025" }, { - "drilldown" : "026", "name" : "#026", + "drilldown" : "026", "y" : 74 }, { "name" : "#027", - "y" : 60, - "drilldown" : "027" + "drilldown" : "027", + "y" : 60 }, { - "drilldown" : "028", "name" : "#028", + "drilldown" : "028", "y" : 80 }, { + "name" : "#029", "drilldown" : "029", - "y" : 79, - "name" : "#029" + "y" : 79 }, { - "y" : 117, "name" : "#030", - "drilldown" : "030" + "drilldown" : "030", + "y" : 117 }, { "drilldown" : "031", - "name" : "#031", - "y" : 89 + "y" : 89, + "name" : "#031" }, { "drilldown" : "032", - "name" : "#032", - "y" : 94 + "y" : 94, + "name" : "#032" }, { - "name" : "#033", "y" : 110, - "drilldown" : "033" + "drilldown" : "033", + "name" : "#033" }, { "y" : 64, - "name" : "#034", - "drilldown" : "034" + "drilldown" : "034", + "name" : "#034" }, { - "drilldown" : "035", + "name" : "#035", "y" : 64, - "name" : "#035" + "drilldown" : "035" }, { - "name" : "#036", + "drilldown" : "036", "y" : 68, - "drilldown" : "036" + "name" : "#036" }, { "name" : "#037", - "y" : 67, - "drilldown" : "037" + "drilldown" : "037", + "y" : 67 }, { - "y" : 68, "name" : "#038", - "drilldown" : "038" + "drilldown" : "038", + "y" : 68 }, { - "drilldown" : "039", + "name" : "#039", "y" : 62, - "name" : "#039" + "drilldown" : "039" }, { "y" : 73, - "name" : "#040", - "drilldown" : "040" + "drilldown" : "040", + "name" : "#040" }, { "name" : "#041", @@ -217,29 +216,29 @@ "drilldown" : "041" }, { - "drilldown" : "042", "y" : 92, + "drilldown" : "042", "name" : "#042" }, { "name" : "#043", - "y" : 68, - "drilldown" : "043" + "drilldown" : "043", + "y" : 68 }, { + "y" : 85, "drilldown" : "044", - "name" : "#044", - "y" : 85 + "name" : "#044" }, { + "drilldown" : "045", "y" : 96, - "name" : "#045", - "drilldown" : "045" + "name" : "#045" }, { + "y" : 87, "drilldown" : "046", - "name" : "#046", - "y" : 87 + "name" : "#046" }, { "drilldown" : "047", @@ -247,168 +246,168 @@ "name" : "#047" }, { + "y" : 108, "drilldown" : "048", - "name" : "#048", - "y" : 108 + "name" : "#048" }, { - "drilldown" : "049", "name" : "#049", + "drilldown" : "049", "y" : 89 }, { "name" : "#050", - "y" : 98, - "drilldown" : "050" + "drilldown" : "050", + "y" : 98 }, { - "y" : 89, "name" : "#051", + "y" : 89, "drilldown" : "051" }, { - "y" : 91, "name" : "#052", - "drilldown" : "052" + "drilldown" : "052", + "y" : 91 }, { - "drilldown" : "053", + "name" : "#053", "y" : 101, - "name" : "#053" + "drilldown" : "053" }, { "drilldown" : "054", - "name" : "#054", - "y" : 103 + "y" : 103, + "name" : "#054" }, { "y" : 88, - "name" : "#055", - "drilldown" : "055" + "drilldown" : "055", + "name" : "#055" }, { - "y" : 95, "name" : "#056", + "y" : 95, "drilldown" : "056" }, { + "drilldown" : "057", "y" : 80, - "name" : "#057", - "drilldown" : "057" + "name" : "#057" }, { - "drilldown" : "058", + "name" : "#058", "y" : 69, - "name" : "#058" + "drilldown" : "058" }, { + "y" : 89, "drilldown" : "059", - "name" : "#059", - "y" : 89 + "name" : "#059" }, { - "name" : "#060", + "drilldown" : "060", "y" : 85, - "drilldown" : "060" + "name" : "#060" }, { + "y" : 81, "drilldown" : "061", - "name" : "#061", - "y" : 81 + "name" : "#061" }, { - "name" : "#062", + "drilldown" : "062", "y" : 58, - "drilldown" : "062" + "name" : "#062" }, { + "name" : "#063", "drilldown" : "063", - "y" : 89, - "name" : "#063" + "y" : 89 }, { - "name" : "#064", + "drilldown" : "064", "y" : 80, - "drilldown" : "064" + "name" : "#064" }, { - "drilldown" : "065", "name" : "#065", - "y" : 73 + "y" : 73, + "drilldown" : "065" }, { "name" : "#066", - "y" : 84, - "drilldown" : "066" + "drilldown" : "066", + "y" : 84 }, { - "drilldown" : "067", + "name" : "#067", "y" : 90, - "name" : "#067" + "drilldown" : "067" }, { - "name" : "#068", + "drilldown" : "068", "y" : 75, - "drilldown" : "068" + "name" : "#068" }, { "y" : 83, - "name" : "#069", - "drilldown" : "069" + "drilldown" : "069", + "name" : "#069" }, { + "drilldown" : "070", "y" : 93, - "name" : "#070", - "drilldown" : "070" + "name" : "#070" }, { + "name" : "#071", "drilldown" : "071", - "y" : 78, - "name" : "#071" + "y" : 78 }, { + "name" : "#072", "drilldown" : "072", - "y" : 112, - "name" : "#072" + "y" : 112 }, { "drilldown" : "073", - "name" : "#073", - "y" : 110 + "y" : 110, + "name" : "#073" }, { - "drilldown" : "074", "name" : "#074", + "drilldown" : "074", "y" : 115 }, { - "name" : "#075", + "drilldown" : "075", "y" : 115, - "drilldown" : "075" + "name" : "#075" }, { - "drilldown" : "076", "name" : "#076", - "y" : 99 + "y" : 99, + "drilldown" : "076" }, { - "drilldown" : "077", "name" : "#077", - "y" : 98 + "y" : 98, + "drilldown" : "077" }, { - "drilldown" : "078", "name" : "#078", + "drilldown" : "078", "y" : 127 }, { "name" : "#079", - "y" : 122, - "drilldown" : "079" + "drilldown" : "079", + "y" : 122 }, { - "y" : 127, "name" : "#080", + "y" : 127, "drilldown" : "080" }, { @@ -418,103 +417,103 @@ }, { "y" : 114, - "name" : "#082", - "drilldown" : "082" + "drilldown" : "082", + "name" : "#082" }, { - "y" : 127, "name" : "#083", - " |
