diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-04-25 21:37:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-25 21:37:45 +0100 |
| commit | 0f8180ced9a99764b94bfe47e6a11b8519c989b6 (patch) | |
| tree | eb3be49c1aab0b8e9219f01aaca55f4012c9cc40 | |
| parent | 0ad93b9d1d9454fbd337e49c281be693900e8f83 (diff) | |
| parent | 55ae7f26b8cd04e5866f34a87feedf1b97051991 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/perl/ch-1.pl | 36 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/perl/ch-2.pl | 62 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/perl/chowla-numbers-perl | 36 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/perl/four-squares-puzzle-perl | 62 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/raku/ch-1.raku | 32 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/raku/ch-2.raku | 39 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/raku/chowla-numbers | 32 | ||||
| -rwxr-xr-x | challenge-109/arne-sommer/raku/four-squares-puzzle | 39 |
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; +} |
