aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-04-25 21:37:45 +0100
committerGitHub <noreply@github.com>2021-04-25 21:37:45 +0100
commit0f8180ced9a99764b94bfe47e6a11b8519c989b6 (patch)
treeeb3be49c1aab0b8e9219f01aaca55f4012c9cc40
parent0ad93b9d1d9454fbd337e49c281be693900e8f83 (diff)
parent55ae7f26b8cd04e5866f34a87feedf1b97051991 (diff)
downloadperlweeklychallenge-club-0f8180ced9a99764b94bfe47e6a11b8519c989b6.tar.gz
perlweeklychallenge-club-0f8180ced9a99764b94bfe47e6a11b8519c989b6.tar.bz2
perlweeklychallenge-club-0f8180ced9a99764b94bfe47e6a11b8519c989b6.zip
Merge pull request #3954 from arnesom/branch-for-challenge-109
Arne Sommer
-rw-r--r--challenge-109/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-109/arne-sommer/perl/ch-1.pl36
-rwxr-xr-xchallenge-109/arne-sommer/perl/ch-2.pl62
-rwxr-xr-xchallenge-109/arne-sommer/perl/chowla-numbers-perl36
-rwxr-xr-xchallenge-109/arne-sommer/perl/four-squares-puzzle-perl62
-rwxr-xr-xchallenge-109/arne-sommer/raku/ch-1.raku32
-rwxr-xr-xchallenge-109/arne-sommer/raku/ch-2.raku39
-rwxr-xr-xchallenge-109/arne-sommer/raku/chowla-numbers32
-rwxr-xr-xchallenge-109/arne-sommer/raku/four-squares-puzzle39
9 files changed, 339 insertions, 0 deletions
diff --git a/challenge-109/arne-sommer/blog.txt b/challenge-109/arne-sommer/blog.txt
new file mode 100644
index 0000000000..cf988cf442
--- /dev/null
+++ b/challenge-109/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/chowla-squared.html
diff --git a/challenge-109/arne-sommer/perl/ch-1.pl b/challenge-109/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..178106e0ea
--- /dev/null
+++ b/challenge-109/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,36 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+use List::Util 'sum';
+
+no warnings "experimental::signatures";
+
+my $limit = $ARGV[0] // 20;
+my @chowla;
+
+for my $index (1 .. $limit)
+{
+ my @divisors = divisors($index, 1, 1);
+
+ push(@chowla, (sum(@divisors) // 0));
+}
+
+say join(", ", @chowla);
+
+
+sub divisors ($number, $not_self, $not_one)
+{
+ my @divisors;
+
+ for my $candidate ( ($not_one ? 2 : 1) .. $number/2)
+ {
+ push(@divisors, $candidate) unless $number % $candidate;
+ }
+
+ push(@divisors, $number) unless $not_self;
+
+ return @divisors;
+}
diff --git a/challenge-109/arne-sommer/perl/ch-2.pl b/challenge-109/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..290329188b
--- /dev/null
+++ b/challenge-109/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,62 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+
+no warnings "experimental::signatures";
+
+use Getopt::Long;
+use Algorithm::Combinatorics 'permutations';
+
+my $short = 0;
+my $all = 0;
+
+GetOptions("short" => \$short,
+ "all" => \$all);
+
+$all = 1 if $short;
+
+my @values = @ARGV;
+
+for my $perm (permutations(\@values))
+{
+ if (check_values(@$perm))
+ {
+ my ($a, $b, $c, $d, $e, $f, $g) = @$perm;
+ if ($short)
+ {
+ say "a=$a, b=$b, c=$c, d=$d, e=$e, f=$f, g=$g";
+ }
+ else
+ {
+ say "a = $a";
+ say "b = $b";
+ say "c = $c";
+ say "d = $d";
+ say "e = $e";
+ say "f = $f";
+ say "g = $g";
+ say "";
+ say "Box 1: a + b = $a + $b = " . ($a + $b);
+ say "Box 2: b + c + d = $b + $c + $d = " . ($b + $c + $d);
+ say "Box 3: d + e + f = $d + $e + $f = " . ($d + $e + $f);
+ say "Box 4: f + g = $f + $g = " . ($f + $g);
+ say "" if $all;
+ }
+
+ last unless $all;
+ }
+}
+
+sub check_values (@values)
+{
+
+ my ($a, $b, $c, $d, $e, $f, $g) = @values;
+ my $box1 = $a + $b;
+ my $box2 = $b + $c + $d;
+ my $box3 = $d + $e + $f;
+ my $box4 = $f + $g;
+ return ($box1 == $box2 && $box3 == $box4 && $box1 == $box3)
+}
diff --git a/challenge-109/arne-sommer/perl/chowla-numbers-perl b/challenge-109/arne-sommer/perl/chowla-numbers-perl
new file mode 100755
index 0000000000..178106e0ea
--- /dev/null
+++ b/challenge-109/arne-sommer/perl/chowla-numbers-perl
@@ -0,0 +1,36 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+use List::Util 'sum';
+
+no warnings "experimental::signatures";
+
+my $limit = $ARGV[0] // 20;
+my @chowla;
+
+for my $index (1 .. $limit)
+{
+ my @divisors = divisors($index, 1, 1);
+
+ push(@chowla, (sum(@divisors) // 0));
+}
+
+say join(", ", @chowla);
+
+
+sub divisors ($number, $not_self, $not_one)
+{
+ my @divisors;
+
+ for my $candidate ( ($not_one ? 2 : 1) .. $number/2)
+ {
+ push(@divisors, $candidate) unless $number % $candidate;
+ }
+
+ push(@divisors, $number) unless $not_self;
+
+ return @divisors;
+}
diff --git a/challenge-109/arne-sommer/perl/four-squares-puzzle-perl b/challenge-109/arne-sommer/perl/four-squares-puzzle-perl
new file mode 100755
index 0000000000..290329188b
--- /dev/null
+++ b/challenge-109/arne-sommer/perl/four-squares-puzzle-perl
@@ -0,0 +1,62 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+
+no warnings "experimental::signatures";
+
+use Getopt::Long;
+use Algorithm::Combinatorics 'permutations';
+
+my $short = 0;
+my $all = 0;
+
+GetOptions("short" => \$short,
+ "all" => \$all);
+
+$all = 1 if $short;
+
+my @values = @ARGV;
+
+for my $perm (permutations(\@values))
+{
+ if (check_values(@$perm))
+ {
+ my ($a, $b, $c, $d, $e, $f, $g) = @$perm;
+ if ($short)
+ {
+ say "a=$a, b=$b, c=$c, d=$d, e=$e, f=$f, g=$g";
+ }
+ else
+ {
+ say "a = $a";
+ say "b = $b";
+ say "c = $c";
+ say "d = $d";
+ say "e = $e";
+ say "f = $f";
+ say "g = $g";
+ say "";
+ say "Box 1: a + b = $a + $b = " . ($a + $b);
+ say "Box 2: b + c + d = $b + $c + $d = " . ($b + $c + $d);
+ say "Box 3: d + e + f = $d + $e + $f = " . ($d + $e + $f);
+ say "Box 4: f + g = $f + $g = " . ($f + $g);
+ say "" if $all;
+ }
+
+ last unless $all;
+ }
+}
+
+sub check_values (@values)
+{
+
+ my ($a, $b, $c, $d, $e, $f, $g) = @values;
+ my $box1 = $a + $b;
+ my $box2 = $b + $c + $d;
+ my $box3 = $d + $e + $f;
+ my $box4 = $f + $g;
+ return ($box1 == $box2 && $box3 == $box4 && $box1 == $box3)
+}
diff --git a/challenge-109/arne-sommer/raku/ch-1.raku b/challenge-109/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..e4ed2ed2d7
--- /dev/null
+++ b/challenge-109/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,32 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($limit = 20, :v(:$verbose));
+
+my $chowla := gather
+{
+ my $index = 1;
+ loop
+ {
+ my @divisors = divisors($index, :not-self, :not-one);
+ say "$index with divisors: { @divisors.join(", ") }" if $verbose;
+
+ take @divisors.sum;
+ $index++;
+ }
+}
+
+say $chowla[^$limit].join(", ");
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+
+ return @divisors;
+}
diff --git a/challenge-109/arne-sommer/raku/ch-2.raku b/challenge-109/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..13276681aa
--- /dev/null
+++ b/challenge-109/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,39 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@values where @values.elems ==7 && all(@values) ~~ Numeric, :s(:$short), :a(:$all) = $short);
+
+for @values.permutations -> @perm
+{
+ if check-values(@perm)
+ {
+ if $short
+ {
+ say "a=@perm[0], b=@perm[1], c=@perm[2], d=@perm[3], e=@perm[4], f=@perm[5], g=@perm[6]";
+ }
+ else
+ {
+ my ($a, $b, $c, $d, $e, $f, $g);
+ say "a = { $a = @perm[0] }";
+ say "b = { $b = @perm[1] }";
+ say "c = { $c = @perm[2] }";
+ say "d = { $d = @perm[3] }";
+ say "e = { $e = @perm[4] }";
+ say "f = { $f = @perm[5] }";
+ say "g = { $g = @perm[6] }";
+ say "";
+ say "Box 1: a + b = $a + $b = { $a + $b }";
+ say "Box 2: b + c + d = $b + $c + $d = { $b + $c + $d }";
+ say "Box 3: d + e + f = $d + $e + $f = { $d + $e + $f }";
+ say "Box 4: f + g = $f + $g = { $f + $g }";
+ say "" if $all;
+ }
+
+ last unless $all;
+ }
+}
+
+sub check-values (@values)
+{
+ my ($a, $b, $c, $d, $e, $f, $g) = @values;
+ return $a + $b == $b + $c + $d == $d + $e + $f == $f + $g;
+}
diff --git a/challenge-109/arne-sommer/raku/chowla-numbers b/challenge-109/arne-sommer/raku/chowla-numbers
new file mode 100755
index 0000000000..e4ed2ed2d7
--- /dev/null
+++ b/challenge-109/arne-sommer/raku/chowla-numbers
@@ -0,0 +1,32 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($limit = 20, :v(:$verbose));
+
+my $chowla := gather
+{
+ my $index = 1;
+ loop
+ {
+ my @divisors = divisors($index, :not-self, :not-one);
+ say "$index with divisors: { @divisors.join(", ") }" if $verbose;
+
+ take @divisors.sum;
+ $index++;
+ }
+}
+
+say $chowla[^$limit].join(", ");
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+
+ return @divisors;
+}
diff --git a/challenge-109/arne-sommer/raku/four-squares-puzzle b/challenge-109/arne-sommer/raku/four-squares-puzzle
new file mode 100755
index 0000000000..13276681aa
--- /dev/null
+++ b/challenge-109/arne-sommer/raku/four-squares-puzzle
@@ -0,0 +1,39 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@values where @values.elems ==7 && all(@values) ~~ Numeric, :s(:$short), :a(:$all) = $short);
+
+for @values.permutations -> @perm
+{
+ if check-values(@perm)
+ {
+ if $short
+ {
+ say "a=@perm[0], b=@perm[1], c=@perm[2], d=@perm[3], e=@perm[4], f=@perm[5], g=@perm[6]";
+ }
+ else
+ {
+ my ($a, $b, $c, $d, $e, $f, $g);
+ say "a = { $a = @perm[0] }";
+ say "b = { $b = @perm[1] }";
+ say "c = { $c = @perm[2] }";
+ say "d = { $d = @perm[3] }";
+ say "e = { $e = @perm[4] }";
+ say "f = { $f = @perm[5] }";
+ say "g = { $g = @perm[6] }";
+ say "";
+ say "Box 1: a + b = $a + $b = { $a + $b }";
+ say "Box 2: b + c + d = $b + $c + $d = { $b + $c + $d }";
+ say "Box 3: d + e + f = $d + $e + $f = { $d + $e + $f }";
+ say "Box 4: f + g = $f + $g = { $f + $g }";
+ say "" if $all;
+ }
+
+ last unless $all;
+ }
+}
+
+sub check-values (@values)
+{
+ my ($a, $b, $c, $d, $e, $f, $g) = @values;
+ return $a + $b == $b + $c + $d == $d + $e + $f == $f + $g;
+}