aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-10-17 20:11:59 +0100
committerGitHub <noreply@github.com>2021-10-17 20:11:59 +0100
commit86cfed69fffdfbc197e8cf3e93e2bc5335e795e8 (patch)
treeea8245c98c04e0b94348497a692813a38d92df8e
parentf2cb497943700a2388973d02148af213a85e67b4 (diff)
parent235303d97888fe34103a281eebfe9ff2076b56b8 (diff)
downloadperlweeklychallenge-club-86cfed69fffdfbc197e8cf3e93e2bc5335e795e8.tar.gz
perlweeklychallenge-club-86cfed69fffdfbc197e8cf3e93e2bc5335e795e8.tar.bz2
perlweeklychallenge-club-86cfed69fffdfbc197e8cf3e93e2bc5335e795e8.zip
Merge pull request #5043 from arnesom/branch-for-challenge-134
Arne Sommer
-rw-r--r--challenge-134/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-134/arne-sommer/perl/ch-1.pl32
-rwxr-xr-xchallenge-134/arne-sommer/perl/ch-2.pl55
-rwxr-xr-xchallenge-134/arne-sommer/perl/distinct-terms-count-perl55
-rwxr-xr-xchallenge-134/arne-sommer/perl/pandigital-number-perl32
-rwxr-xr-xchallenge-134/arne-sommer/raku/ch-1.raku20
-rwxr-xr-xchallenge-134/arne-sommer/raku/ch-2.raku35
-rwxr-xr-xchallenge-134/arne-sommer/raku/distinct-terms-count35
-rwxr-xr-xchallenge-134/arne-sommer/raku/distinct-terms-count-twice34
-rwxr-xr-xchallenge-134/arne-sommer/raku/pandigital-number20
-rwxr-xr-xchallenge-134/arne-sommer/raku/pandigital-number-loop20
-rwxr-xr-xchallenge-134/arne-sommer/raku/pandigital-number-permutations16
12 files changed, 355 insertions, 0 deletions
diff --git a/challenge-134/arne-sommer/blog.txt b/challenge-134/arne-sommer/blog.txt
new file mode 100644
index 0000000000..0226a83c51
--- /dev/null
+++ b/challenge-134/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/distinctly-pandigital.html
diff --git a/challenge-134/arne-sommer/perl/ch-1.pl b/challenge-134/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..bbba169884
--- /dev/null
+++ b/challenge-134/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,32 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+use Algorithm::Combinatorics 'permutations';
+use Array::Utils 'array_minus'; ## Debian/Ubuntu: libarray-utils-perl
+
+my $n = $ARGV[0] // 5;
+
+die "Postive integer only" unless $n =~ /^[1-9]\d*$/;
+
+my @result;
+
+my @base = (0 .. 9);
+
+LOOP:
+for my $first (1 .. 9)
+{
+ my @first = ($first);
+ my @rest = array_minus(@base, @first);
+
+ for my $permutation (permutations(\@rest))
+ {
+ push(@result, ($first . join("", @$permutation)));
+ last LOOP if @result == $n;
+ }
+}
+
+say join(", ", @result);
+
diff --git a/challenge-134/arne-sommer/perl/ch-2.pl b/challenge-134/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..8b3716356e
--- /dev/null
+++ b/challenge-134/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,55 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use Getopt::Long;
+use List::Util 'uniq' ;
+my $verbose = 0;
+
+GetOptions("verbose" => \$verbose);
+
+my $m = $ARGV[0] // 0;
+my $n = $ARGV[1] // 0;
+
+die "Postive integer only" unless $m =~ /^[1-9]\d*$/;
+die "Postive integer only" unless $n =~ /^[1-9]\d*$/;
+
+my @values;
+
+for my $row (1 .. $m)
+{
+ my @row = map { $_ * $row } 1.. $n;
+ push(@values, \@row);
+}
+
+my $width = length($m * $n);
+my $r_width = length($m);
+
+say ":Max width number: $width" if $verbose;
+say ":Max width row ID: $r_width" if $verbose;
+
+say sprintf('%' . ( $width - 1 ) . "s", "x"),
+ " |",
+ join(" ", map { sprintf('%' . $width . "d", $_) } (1..$n));
+
+say "-" x $r_width, "-+", "-" x ($n * ($width +1) );
+
+my $i = 0;
+
+my @all;
+
+for my $row (@values)
+{
+ my @row = @$row;
+ push(@all, @row);
+ say sprintf('%' . $r_width . "d", ++$i) ,
+ " |",
+ join(" ", map { sprintf('%' . $width . "d", $_) } @row);
+}
+
+my @distinct = sort { $a <=> $b } uniq(@all);
+
+say "";
+say "Distinct Terms: ", join(", ", @distinct);
+say "Count: " . @distinct;
diff --git a/challenge-134/arne-sommer/perl/distinct-terms-count-perl b/challenge-134/arne-sommer/perl/distinct-terms-count-perl
new file mode 100755
index 0000000000..8b3716356e
--- /dev/null
+++ b/challenge-134/arne-sommer/perl/distinct-terms-count-perl
@@ -0,0 +1,55 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use Getopt::Long;
+use List::Util 'uniq' ;
+my $verbose = 0;
+
+GetOptions("verbose" => \$verbose);
+
+my $m = $ARGV[0] // 0;
+my $n = $ARGV[1] // 0;
+
+die "Postive integer only" unless $m =~ /^[1-9]\d*$/;
+die "Postive integer only" unless $n =~ /^[1-9]\d*$/;
+
+my @values;
+
+for my $row (1 .. $m)
+{
+ my @row = map { $_ * $row } 1.. $n;
+ push(@values, \@row);
+}
+
+my $width = length($m * $n);
+my $r_width = length($m);
+
+say ":Max width number: $width" if $verbose;
+say ":Max width row ID: $r_width" if $verbose;
+
+say sprintf('%' . ( $width - 1 ) . "s", "x"),
+ " |",
+ join(" ", map { sprintf('%' . $width . "d", $_) } (1..$n));
+
+say "-" x $r_width, "-+", "-" x ($n * ($width +1) );
+
+my $i = 0;
+
+my @all;
+
+for my $row (@values)
+{
+ my @row = @$row;
+ push(@all, @row);
+ say sprintf('%' . $r_width . "d", ++$i) ,
+ " |",
+ join(" ", map { sprintf('%' . $width . "d", $_) } @row);
+}
+
+my @distinct = sort { $a <=> $b } uniq(@all);
+
+say "";
+say "Distinct Terms: ", join(", ", @distinct);
+say "Count: " . @distinct;
diff --git a/challenge-134/arne-sommer/perl/pandigital-number-perl b/challenge-134/arne-sommer/perl/pandigital-number-perl
new file mode 100755
index 0000000000..bbba169884
--- /dev/null
+++ b/challenge-134/arne-sommer/perl/pandigital-number-perl
@@ -0,0 +1,32 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+use Algorithm::Combinatorics 'permutations';
+use Array::Utils 'array_minus'; ## Debian/Ubuntu: libarray-utils-perl
+
+my $n = $ARGV[0] // 5;
+
+die "Postive integer only" unless $n =~ /^[1-9]\d*$/;
+
+my @result;
+
+my @base = (0 .. 9);
+
+LOOP:
+for my $first (1 .. 9)
+{
+ my @first = ($first);
+ my @rest = array_minus(@base, @first);
+
+ for my $permutation (permutations(\@rest))
+ {
+ push(@result, ($first . join("", @$permutation)));
+ last LOOP if @result == $n;
+ }
+}
+
+say join(", ", @result);
+
diff --git a/challenge-134/arne-sommer/raku/ch-1.raku b/challenge-134/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..464ba5b3f6
--- /dev/null
+++ b/challenge-134/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0 = 5);
+
+my $pandigital-seq := gather
+{
+ my @base = 0 .. 9;
+
+ for 1 .. 9 -> $first
+ {
+ my @rest = (@base (-) $first).keys.sort;
+
+ for @rest.permutations -> @permutation
+ {
+ take ($first ~ @permutation.join);
+ }
+ }
+}
+
+say $pandigital-seq[^$n].join(", ");
diff --git a/challenge-134/arne-sommer/raku/ch-2.raku b/challenge-134/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..bcb307ae33
--- /dev/null
+++ b/challenge-134/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,35 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $m where $m > 0, Int $n where $n > 0, :v($verbose));
+
+my @values;
+
+for 1 .. $m -> $row
+{
+ @values.push: (1 .. $n).map({ $_ * $row });
+}
+
+# say ":", @values.raku;
+
+my $width = ($m * $n).chars;
+my $r-width = ($m).chars;
+
+say ":Max width number: $width" if $verbose;
+say ":Max width row ID: $r-width" if $verbose;
+
+say "x".fmt("%{$width-1}s"), " |", (1..$n).map({ $_.fmt("%{$width}d") }).join(" ");
+
+say "-" x $r-width, "-+", "-" x ($n * ($width +1) -1);
+
+for @values -> @row
+{
+ state $i = 0;
+
+ say "{ (++$i).fmt("%{$r-width}d") } |", @row.map({ ($_).fmt("%{$width}d") }).join(" ");
+}
+
+my @distinct = @values>>.List.flat.sort.squish;
+
+say "";
+say "Distinct Terms: { @distinct.join(", ") }";
+say "Count: { @distinct.elems }";
diff --git a/challenge-134/arne-sommer/raku/distinct-terms-count b/challenge-134/arne-sommer/raku/distinct-terms-count
new file mode 100755
index 0000000000..bcb307ae33
--- /dev/null
+++ b/challenge-134/arne-sommer/raku/distinct-terms-count
@@ -0,0 +1,35 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $m where $m > 0, Int $n where $n > 0, :v($verbose));
+
+my @values;
+
+for 1 .. $m -> $row
+{
+ @values.push: (1 .. $n).map({ $_ * $row });
+}
+
+# say ":", @values.raku;
+
+my $width = ($m * $n).chars;
+my $r-width = ($m).chars;
+
+say ":Max width number: $width" if $verbose;
+say ":Max width row ID: $r-width" if $verbose;
+
+say "x".fmt("%{$width-1}s"), " |", (1..$n).map({ $_.fmt("%{$width}d") }).join(" ");
+
+say "-" x $r-width, "-+", "-" x ($n * ($width +1) -1);
+
+for @values -> @row
+{
+ state $i = 0;
+
+ say "{ (++$i).fmt("%{$r-width}d") } |", @row.map({ ($_).fmt("%{$width}d") }).join(" ");
+}
+
+my @distinct = @values>>.List.flat.sort.squish;
+
+say "";
+say "Distinct Terms: { @distinct.join(", ") }";
+say "Count: { @distinct.elems }";
diff --git a/challenge-134/arne-sommer/raku/distinct-terms-count-twice b/challenge-134/arne-sommer/raku/distinct-terms-count-twice
new file mode 100755
index 0000000000..306ef96859
--- /dev/null
+++ b/challenge-134/arne-sommer/raku/distinct-terms-count-twice
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $m where $m > 0, Int $n where $n > 0, :v($verbose));
+
+my $width = ($m * $n).chars;
+my $r-width = ($m).chars;
+
+say ":Max width number: $width" if $verbose;
+say ":Max width row ID: $r-width" if $verbose;
+
+say "x".fmt("%{$width-1}s"), " |", (1..$n).map({ $_.fmt("%{$width}d") }).join(" ");
+
+say "-" x $r-width, "-+", "-" x ($n * ($width +1) -1);
+
+for 1 .. $m -> $row
+{
+ say "{ $row.fmt("%{$r-width}d") } |", (1..$n).map({ ($row * $_).fmt("%{$width}d") }).join(" ");
+}
+
+my @values;
+
+for 1 .. $m -> $row
+{
+ for 1 .. $n -> $col
+ {
+ @values.push: $row * $col;
+ }
+}
+
+my @distinct = @values.sort.squish;
+
+say "";
+say "Distinct Terms: { @distinct.join(", ") }";
+say "Count: { @distinct.elems }";
diff --git a/challenge-134/arne-sommer/raku/pandigital-number b/challenge-134/arne-sommer/raku/pandigital-number
new file mode 100755
index 0000000000..464ba5b3f6
--- /dev/null
+++ b/challenge-134/arne-sommer/raku/pandigital-number
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0 = 5);
+
+my $pandigital-seq := gather
+{
+ my @base = 0 .. 9;
+
+ for 1 .. 9 -> $first
+ {
+ my @rest = (@base (-) $first).keys.sort;
+
+ for @rest.permutations -> @permutation
+ {
+ take ($first ~ @permutation.join);
+ }
+ }
+}
+
+say $pandigital-seq[^$n].join(", ");
diff --git a/challenge-134/arne-sommer/raku/pandigital-number-loop b/challenge-134/arne-sommer/raku/pandigital-number-loop
new file mode 100755
index 0000000000..a452d7c7dc
--- /dev/null
+++ b/challenge-134/arne-sommer/raku/pandigital-number-loop
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0 = 5, :v($verbose));
+
+my $pandigital-seq := gather
+{
+ my $base = 10;
+ my @base = 0 .. 9;
+ my $start = (1 ~ '0' x $base -1).Int;
+
+ say ":Start: $start" if $verbose;
+
+ for $start .. Inf -> $candidate
+ {
+ say ":Checking $candidate" if $verbose;
+ take $candidate if $candidate.comb.unique.elems == $base;
+ }
+}
+
+say $pandigital-seq[^$n].join(", ");
diff --git a/challenge-134/arne-sommer/raku/pandigital-number-permutations b/challenge-134/arne-sommer/raku/pandigital-number-permutations
new file mode 100755
index 0000000000..cc82f0370f
--- /dev/null
+++ b/challenge-134/arne-sommer/raku/pandigital-number-permutations
@@ -0,0 +1,16 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0 = 5, :v($verbose));
+
+my $pandigital-seq := gather
+{
+ my @base = 0 .. 9;
+
+ for @base.permutations -> @permutation
+ {
+ say ":Candidate ", @permutation.join("") if $verbose;
+ take @permutation.join unless @permutation[0] == 0;
+ }
+}
+
+say $pandigital-seq[^$n].join(", ");