aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-10-05 17:22:11 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-10-05 17:22:11 +0100
commit19db2a7cdb383a38a5d1f7500d35353e027f3858 (patch)
treec4711834288cfacbb022cb4020a211f03d30a68c
parentdfc0b71eb6c46c8f48c1f9e4fc68f1f927ddb574 (diff)
downloadperlweeklychallenge-club-19db2a7cdb383a38a5d1f7500d35353e027f3858.tar.gz
perlweeklychallenge-club-19db2a7cdb383a38a5d1f7500d35353e027f3858.tar.bz2
perlweeklychallenge-club-19db2a7cdb383a38a5d1f7500d35353e027f3858.zip
- Added solutions by Peter Campbell Smith.
-rwxr-xr-xchallenge-133/peter-campbell-smith/perl/ch-1.pl42
-rwxr-xr-xchallenge-133/peter-campbell-smith/perl/ch-2.pl91
-rw-r--r--stats/pwc-current.json109
-rw-r--r--stats/pwc-language-breakdown-summary.json66
-rw-r--r--stats/pwc-language-breakdown.json802
-rw-r--r--stats/pwc-leaders.json736
-rw-r--r--stats/pwc-summary-1-30.json34
-rw-r--r--stats/pwc-summary-121-150.json106
-rw-r--r--stats/pwc-summary-151-180.json36
-rw-r--r--stats/pwc-summary-181-210.json104
-rw-r--r--stats/pwc-summary-211-240.json48
-rw-r--r--stats/pwc-summary-241-270.json36
-rw-r--r--stats/pwc-summary-31-60.json44
-rw-r--r--stats/pwc-summary-61-90.json110
-rw-r--r--stats/pwc-summary-91-120.json38
-rw-r--r--stats/pwc-summary.json528
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"
},
{