diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-10-05 17:22:11 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-10-05 17:22:11 +0100 |
| commit | 19db2a7cdb383a38a5d1f7500d35353e027f3858 (patch) | |
| tree | c4711834288cfacbb022cb4020a211f03d30a68c | |
| parent | dfc0b71eb6c46c8f48c1f9e4fc68f1f927ddb574 (diff) | |
| download | perlweeklychallenge-club-19db2a7cdb383a38a5d1f7500d35353e027f3858.tar.gz perlweeklychallenge-club-19db2a7cdb383a38a5d1f7500d35353e027f3858.tar.bz2 perlweeklychallenge-club-19db2a7cdb383a38a5d1f7500d35353e027f3858.zip | |
- Added solutions by Peter Campbell Smith.
| -rwxr-xr-x | challenge-133/peter-campbell-smith/perl/ch-1.pl | 42 | ||||
| -rwxr-xr-x | challenge-133/peter-campbell-smith/perl/ch-2.pl | 91 | ||||
| -rw-r--r-- | stats/pwc-current.json | 109 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 66 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 802 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 736 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 34 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 106 | ||||
| -rw-r--r-- | stats/pwc-summary-151-180.json | 36 | ||||
| -rw-r--r-- | stats/pwc-summary-181-210.json | 104 | ||||
| -rw-r--r-- | stats/pwc-summary-211-240.json | 48 | ||||
| -rw-r--r-- | stats/pwc-summary-241-270.json | 36 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 44 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 110 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 38 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 528 |
16 files changed, 1539 insertions, 1391 deletions
diff --git a/challenge-133/peter-campbell-smith/perl/ch-1.pl b/challenge-133/peter-campbell-smith/perl/ch-1.pl new file mode 100755 index 0000000000..d4ec3fc1e8 --- /dev/null +++ b/challenge-133/peter-campbell-smith/perl/ch-1.pl @@ -0,0 +1,42 @@ +#!/usr/bin/perl + +# Peter Campbell Smith - 2021-10-05 +# PWC 133 task 1 + +use strict; +use warnings; + +# Find the integer square root of a +ve integer, ie the largest integer whose square +# does not exceed the given number. + +# This is a simple binary chop but it works in milliseconds up to some pretty large +# numbers. + +my ($n, $low, $high, $odd, $try); + +$n = 123456; +chomp $n; + +$low = 1; # answer can't be less than this +$high = $n; # or more than this + +while (1) { + + # get a trial answer which is the average of $low and $high (rounded up) + $odd = ($low + $high) & 1 ? 1 : 0; # because we aren't allowed to use int() + $try = ($low + $high + $odd) / 2; + + # if the trial's square is larger than n, set the new $high to the trial value + if ($try**2 > $n) { + $high = $try; + + # or if it is less than or equal, set the new $low to the trial value + } else { + $low = $try; + } + + # and finish when $low is just 1 less than $high + last if $high == $low + 1; +} + +print qq[$n input\n$low answer\n] . $low**2 . qq[ = answer**2\n] . $high**2 . qq[ = (answer + 1)**2\n]; diff --git a/challenge-133/peter-campbell-smith/perl/ch-2.pl b/challenge-133/peter-campbell-smith/perl/ch-2.pl new file mode 100755 index 0000000000..559914f063 --- /dev/null +++ b/challenge-133/peter-campbell-smith/perl/ch-2.pl @@ -0,0 +1,91 @@ +#!/usr/bin/perl + +# Peter Campbell Smith - 2021-10-05 +# PWC 133 task 2 + +use strict; +use warnings; + +# Find the first 10 Smith numbers. + +# A Smith number is not prime and the sum of its digits equals the sum of +# the digits of its prime factors. + +my ($j, $sd_of_number, @prime_factors, $k, $sd_of_prime_factors, $count, @sieve); + +# make sieve of Eratosthenes +@sieve = make_sieve(1000); # $sieve[$j] == 1 if $j is prime or == 0 if not + +# main loop +$count = 1; +for $j (2 .. 10000) { + next if $sieve[$j]; # not a candidate as $j is prime + + $sd_of_number = sum_of_digits($j); + + $sd_of_prime_factors = 0; + @prime_factors = prime_factors($j); + for $k (@prime_factors) { + $sd_of_prime_factors += sum_of_digits($k); + } + next unless $sd_of_number == $sd_of_prime_factors; + + print qq[Smith number $count is $j\n]; + last if $count ++ == 10; +} + +sub make_sieve { + + # make sieve of Eratosthenes + my ($arg, $j, $k, @sieve); + + # set all values provisionally to 1 (ie prime) + $arg = $_[0]; + for $j (0 .. $arg) { + $sieve[$j] = 1; + } + + # for each prime in turn, set its multiples to 0 (ie not prime) + for $j (2 .. $arg) { + next unless $sieve[$j]; # $j is not prime + last if $j ** 2 > $arg; + for $k ($j .. $arg) { + last if $k * $j > $arg; + $sieve[$k * $j] = 0; + } + } + return @sieve; +} + +sub sum_of_digits { + + # returns sum of the digits of the argument + my ($number, $digit, $sum); + + $number = $_[0]; + while ($number) { + $digit = $number % 10; + $sum += $digit; + $number = ($number - $digit) / 10; + } + return $sum; +} + +sub prime_factors { + + # return array of prime factors of argument + my ($j, $arg, $rem, @factors); + + $arg = $_[0]; + $rem = $arg; + for $j (2 .. $arg) { + next unless $sieve[$j]; + while ($rem % $j == 0) { + push @factors, $j; + $rem /= $j; + } + } + return @factors; +} + + diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 6d36474295..5f5b1919ad 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,18 +1,7 @@ { - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "legend" : { - "enabled" : 0 - }, "title" : { "text" : "The Weekly Challenge - 133" }, - "xAxis" : { - "type" : "category" - }, "plotOptions" : { "series" : { "borderWidth" : 0, @@ -22,14 +11,21 @@ } } }, + "legend" : { + "enabled" : 0 + }, + "chart" : { + "type" : "column" + }, "series" : [ { + "name" : "The Weekly Challenge - 133", "colorByPoint" : 1, "data" : [ { "name" : "Abigail", - "y" : 2, - "drilldown" : "Abigail" + "drilldown" : "Abigail", + "y" : 2 }, { "name" : "Andinus", @@ -37,64 +33,56 @@ "drilldown" : "Andinus" }, { - "name" : "Ben Davies", "drilldown" : "Ben Davies", - "y" : 2 + "y" : 2, + "name" : "Ben Davies" }, { - "drilldown" : "Cheok-Yin Fung", + "name" : "Cheok-Yin Fung", "y" : 1, - "name" : "Cheok-Yin Fung" + "drilldown" : "Cheok-Yin Fung" }, { - "name" : "James Raspass", + "drilldown" : "James Raspass", "y" : 2, - "drilldown" : "James Raspass" + "name" : "James Raspass" }, { - "name" : "James Smith", "drilldown" : "James Smith", - "y" : 2 + "y" : 2, + "name" : "James Smith" }, { - "drilldown" : "Mark Anderson", "y" : 2, + "drilldown" : "Mark Anderson", "name" : "Mark Anderson" }, { - "name" : "Roger Bell_West", + "drilldown" : "Peter Campbell Smith", + "y" : 2, + "name" : "Peter Campbell Smith" + }, + { + "drilldown" : "Roger Bell_West", "y" : 4, - "drilldown" : "Roger Bell_West" + "name" : "Roger Bell_West" } - ], - "name" : "The Weekly Challenge - 133" + ] } ], - "subtitle" : { - "text" : "[Champions: 8] Last updated at 2021-10-05 07:53:19 GMT" - }, - "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/>" - }, - "chart" : { - "type" : "column" - }, "drilldown" : { "series" : [ { - "name" : "Abigail", + "id" : "Abigail", "data" : [ [ "Perl", 2 ] ], - "id" : "Abigail" + "name" : "Abigail" }, { - "id" : "Andinus", "data" : [ [ "Raku", @@ -105,6 +93,7 @@ 1 ] ], + "id" : "Andinus", "name" : "Andinus" }, { @@ -118,24 +107,24 @@ "name" : "Ben Davies" }, { + "name" : "Cheok-Yin Fung", "data" : [ [ "Perl", 1 ] ], - "id" : "Cheok-Yin Fung", - "name" : "Cheok-Yin Fung" + "id" : "Cheok-Yin Fung" }, { "name" : "James Raspass", - "id" : "James Raspass", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "James Raspass" }, { "name" : "James Smith", @@ -148,17 +137,27 @@ "id" : "James Smith" }, { + "name" : "Mark Anderson", "id" : "Mark Anderson", "data" : [ [ "Raku", 2 ] + ] + }, + { + "id" : "Peter Campbell Smith", + "data" : [ + [ + "Perl", + 2 + ] ], - "name" : "Mark Anderson" + "name" : "Peter Campbell Smith" }, { - "name" : "Roger Bell_West", + "id" : "Roger Bell_West", "data" : [ [ "Perl", @@ -169,8 +168,24 @@ 2 ] ], - "id" : "Roger Bell_West" + "name" : "Roger Bell_West" } ] + }, + "subtitle" : { + "text" : "[Champions: 9] Last updated at 2021-10-05 16:20:33 GMT" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "xAxis" : { + "type" : "category" + }, + "tooltip" : { + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", + "followPointer" : 1, + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 91cf85e93f..5014760b93 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,24 +1,27 @@ { + "xAxis" : { + "type" : "category", + "labels" : { + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + } + } + }, "tooltip" : { "pointFormat" : "<b>{point.y:.0f}</b>" }, - "chart" : { - "type" : "column" + "subtitle" : { + "text" : "Last updated at 2021-10-05 16:20:33 GMT" + }, + "yAxis" : { + "title" : { + "text" : null + }, + "min" : 0 }, "series" : [ { - "dataLabels" : { - "align" : "right", - "format" : "{point.y:.0f}", - "rotation" : -90, - "enabled" : "true", - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - }, - "y" : 10, - "color" : "#FFFFFF" - }, "data" : [ [ "Blog", @@ -26,38 +29,35 @@ ], [ "Perl", - 6307 + 6309 ], [ "Raku", 3871 ] ], + "dataLabels" : { + "rotation" : -90, + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + }, + "enabled" : "true", + "align" : "right", + "format" : "{point.y:.0f}", + "y" : 10, + "color" : "#FFFFFF" + }, "name" : "Contributions" } ], - "subtitle" : { - "text" : "Last updated at 2021-10-05 07:53:18 GMT" - }, "title" : { "text" : "The Weekly Challenge Contributions [2019 - 2021]" }, - "xAxis" : { - "type" : "category", - "labels" : { - "style" : { - "fontFamily" : "Verdana, sans-serif", - "fontSize" : "13px" - } - } - }, - "yAxis" : { - "min" : 0, - "title" : { - "text" : null - } - }, "legend" : { "enabled" : "false" + }, + "chart" : { + "type" : "column" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 586f6ddd58..108a251b8c 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,31 +1,15 @@ { - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 - } - }, - "title" : { - "text" : "The Weekly Challenge Language" - }, - "xAxis" : { - "type" : "category" + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2021-10-05 16:20:33 GMT" }, "yAxis" : { "title" : { "text" : "Total Solutions" } }, - "legend" : { - "enabled" : "false" - }, "drilldown" : { "series" : [ { - "name" : "001", "id" : "001", "data" : [ [ @@ -40,7 +24,8 @@ "Blog", 11 ] - ] + ], + "name" : "001" }, { "data" : [ @@ -79,6 +64,7 @@ ] }, { + "id" : "004", "data" : [ [ "Perl", @@ -93,11 +79,10 @@ 10 ] ], - "id" : "004", "name" : "004" }, { - "id" : "005", + "name" : "005", "data" : [ [ "Perl", @@ -112,7 +97,7 @@ 12 ] ], - "name" : "005" + "id" : "005" }, { "id" : "006", @@ -134,6 +119,7 @@ }, { "name" : "007", + "id" : "007", "data" : [ [ "Perl", @@ -147,11 +133,9 @@ "Blog", 10 ] - ], - "id" : "007" + ] }, { - "id" : "008", "data" : [ [ "Perl", @@ -166,11 +150,11 @@ 12 ] ], + "id" : "008", "name" : "008" }, { "name" : "009", - "id" : "009", "data" : [ [ "Perl", @@ -184,11 +168,10 @@ "Blog", 13 ] - ] + ], + "id" : "009" }, { - "name" : "010", - "id" : "010", "data" : [ [ "Perl", @@ -202,10 +185,11 @@ "Blog", 11 ] - ] + ], + "id" : "010", + "name" : "010" }, { - "name" : "011", "data" : [ [ "Perl", @@ -220,10 +204,10 @@ 10 ] ], - "id" : "011" + "id" : "011", + "name" : "011" }, { - "name" : "012", "id" : "012", "data" : [ [ @@ -238,7 +222,8 @@ "Blog", 11 ] - ] + ], + "name" : "012" }, { "name" : "013", @@ -277,6 +262,7 @@ "name" : "014" }, { + "id" : "015", "data" : [ [ "Perl", @@ -291,7 +277,6 @@ 15 ] ], - "id" : "015", "name" : "015" }, { @@ -313,7 +298,6 @@ ] }, { - "name" : "017", "id" : "017", "data" : [ [ @@ -328,10 +312,12 @@ "Blog", 12 ] - ] + ], + "name" : "017" }, { "name" : "018", + "id" : "018", "data" : [ [ "Perl", @@ -345,11 +331,10 @@ "Blog", 14 ] - ], - "id" : "018" + ] }, { - "id" : "019", + "name" : "019", "data" : [ [ "Perl", @@ -364,11 +349,9 @@ 13 ] ], - "name" : "019" + "id" : "019" }, { - "name" : "020", - "id" : "020", "data" : [ [ "Perl", @@ -382,10 +365,11 @@ "Blog", 13 ] - ] + ], + "id" : "020", + "name" : "020" }, { - "name" : "021", "id" : "021", "data" : [ [ @@ -400,10 +384,10 @@ "Blog", 10 ] - ] + ], + "name" : "021" }, { - "id" : "022", "data" : [ [ "Perl", @@ -418,10 +402,10 @@ 10 ] ], + "id" : "022", "name" : "022" }, { - "name" : "023", "id" : "023", "data" : [ [ @@ -436,10 +420,11 @@ "Blog", 12 ] - ] + ], + "name" : "023" }, { - "id" : "024", + "name" : "024", "data" : [ [ "Perl", @@ -454,11 +439,9 @@ 11 ] ], - "name" : "024" + "id" : "024" }, { - "name" : "025", - "id" : "025", "data" : [ [ "Perl", @@ -472,10 +455,13 @@ "Blog", 12 ] - ] + ], + "id" : "025", + "name" : "025" }, { "name" : "026", + "id" : "026", "data" : [ [ "Perl", @@ -489,8 +475,7 @@ "Blog", 10 ] - ], - "id" : "026" + ] }, { "data" : [ @@ -511,7 +496,7 @@ "name" : "027" }, { - "name" : "028", + "id" : "028", "data" : [ [ "Perl", @@ -526,9 +511,10 @@ 9 ] ], - "id" : "028" + "name" : "028" }, { + "name" : "029", "data" : [ [ "Perl", @@ -543,11 +529,10 @@ 12 ] ], - "id" : "029", - "name" : "029" + "id" : "029" }, { - "name" : "030", + "id" : "030", "data" : [ [ "Perl", @@ -562,11 +547,10 @@ 10 ] ], - "id" : "030" + "name" : "030" }, { "name" : "031", - "id" : "031", "data" : [ [ "Perl", @@ -580,11 +564,11 @@ "Blog", 9 ] - ] + ], + "id" : "031" }, { "name" : "032", - "id" : "032", "data" : [ [ "Perl", @@ -598,9 +582,11 @@ "Blog", 10 ] - ] + ], + "id" : "032" }, { + "id" : "033", "data" : [ [ "Perl", @@ -615,11 +601,10 @@ 10 ] ], - "id" : "033", "name" : "033" }, { - "id" : "034", + "name" : "034", "data" : [ [ "Perl", @@ -634,10 +619,9 @@ 11 ] ], - "name" : "034" + "id" : "034" }, { - "id" : "035", "data" : [ [ "Perl", @@ -652,9 +636,11 @@ 9 ] ], + "id" : "035", "name" : "035" }, { + "id" : "036", "data" : [ [ "Perl", @@ -669,11 +655,10 @@ 11 ] ], - "id" : "036", "name" : "036" }, { - "name" : "037", + "id" : "037", "data" : [ [ "Perl", @@ -688,10 +673,10 @@ 9 ] ], - "id" : "037" + "name" : "037" }, { - "id" : "038", + "name" : "038", "data" : [ [ "Perl", @@ -706,9 +691,10 @@ 12 ] ], - "name" : "038" + "id" : "038" }, { + "name" : "039", "id" : "039", "data" : [ [ @@ -723,8 +709,7 @@ "Blog", 12 ] - ], - "name" : "039" + ] }, { "id" : "040", @@ -763,7 +748,6 @@ "id" : "041" }, { - "id" : "042", "data" : [ [ "Perl", @@ -778,6 +762,7 @@ 11 ] ], + "id" : "042", "name" : "042" }, { @@ -799,7 +784,6 @@ ] }, { - "id" : "044", "data" : [ [ "Perl", @@ -814,6 +798,7 @@ 11 ] ], + "id" : "044", "name" : "044" }, { @@ -853,7 +838,7 @@ ] }, { - "name" : "047", + "id" : "047", "data" : [ [ "Perl", @@ -868,7 +853,7 @@ 10 ] ], - "id" : "047" + "name" : "047" }, { "data" : [ @@ -907,7 +892,6 @@ "name" : "049" }, { - "name" : "050", "id" : "050", "data" : [ [ @@ -922,10 +906,12 @@ "Blog", 12 ] - ] + ], + "name" : "050" }, { "name" : "051", + "id" : "051", "data" : [ [ "Perl", @@ -939,11 +925,9 @@ "Blog", 11 ] - ], - "id" : "051" + ] }, { - "name" : "052", "data" : [ [ "Perl", @@ -958,10 +942,10 @@ 14 ] ], - "id" : "052" + "id" : "052", + "name" : "052" }, { - "id" : "053", "data" : [ [ "Perl", @@ -976,10 +960,10 @@ 15 ] ], + "id" : "053", "name" : "053" }, { - "name" : "054", "data" : [ [ "Perl", @@ -994,10 +978,10 @@ 18 ] ], - "id" : "054" + "id" : "054", + "name" : "054" }, { - "name" : "055", "data" : [ [ "Perl", @@ -1012,11 +996,11 @@ 14 ] ], - "id" : "055" + "id" : "055", + "name" : "055" }, { "name" : "056", - "id" : "056", "data" : [ [ "Perl", @@ -1030,11 +1014,10 @@ "Blog", 16 ] - ] + ], + "id" : "056" }, { - "name" : "057", - "id" : "057", "data" : [ [ "Perl", @@ -1048,7 +1031,9 @@ "Blog", 15 ] - ] + ], + "id" : "057", + "name" : "057" }, { "id" : "058", @@ -1123,6 +1108,7 @@ "name" : "061" }, { + "id" : "062", "data" : [ [ "Perl", @@ -1137,12 +1123,9 @@ 11 ] ], - "id" : "062", "name" : "062" }, { - "name" : "063", - "id" : "063", "data" : [ [ "Perl", @@ -1156,9 +1139,12 @@ "Blog", 13 ] - ] + ], + "id" : "063", + "name" : "063" }, { |
