aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-01-02 18:05:29 +0000
committerGitHub <noreply@github.com>2022-01-02 18:05:29 +0000
commit960ace31e3a337372b0c60d8e1671dc76e39fc6b (patch)
tree0204060404048b25a65e14dce9a75d3b0e10ee7a
parent8cc72bf3f112d1349159fe933cfcfd93cd3444ec (diff)
parent488674e41cacb4d72a5d1efe5b837109d0ae3be7 (diff)
downloadperlweeklychallenge-club-960ace31e3a337372b0c60d8e1671dc76e39fc6b.tar.gz
perlweeklychallenge-club-960ace31e3a337372b0c60d8e1671dc76e39fc6b.tar.bz2
perlweeklychallenge-club-960ace31e3a337372b0c60d8e1671dc76e39fc6b.zip
Merge pull request #5446 from arnesom/branch-for-challenge-145
Arne Sommer
-rw-r--r--challenge-145/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-145/arne-sommer/perl/ch-1.pl16
-rwxr-xr-xchallenge-145/arne-sommer/perl/ch-2.pl32
-rwxr-xr-xchallenge-145/arne-sommer/perl/dot-product-perl16
-rwxr-xr-xchallenge-145/arne-sommer/raku/ch-1.raku10
-rwxr-xr-xchallenge-145/arne-sommer/raku/ch-2.raku22
-rwxr-xr-xchallenge-145/arne-sommer/raku/dot-product10
-rwxr-xr-xchallenge-145/arne-sommer/raku/dot-product-Z10
-rwxr-xr-xchallenge-145/arne-sommer/raku/palindromic-tree50
-rwxr-xr-xchallenge-145/arne-sommer/raku/palindromic-tree-reordered22
-rwxr-xr-xchallenge-145/arne-sommer/raku/palindromic-tree-unique48
-rwxr-xr-xchallenge-145/arne-sommer/raku/palindromic-tree-unordered18
12 files changed, 255 insertions, 0 deletions
diff --git a/challenge-145/arne-sommer/blog.txt b/challenge-145/arne-sommer/blog.txt
new file mode 100644
index 0000000000..1533389f81
--- /dev/null
+++ b/challenge-145/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/palindot.html
diff --git a/challenge-145/arne-sommer/perl/ch-1.pl b/challenge-145/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..0bc6e3d5ef
--- /dev/null
+++ b/challenge-145/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use List::Util 'sum';
+
+my $a = shift(@ARGV) // '1 2 3';
+my $b = shift(@ARGV) // '4 5 6';
+
+my @a = split(/\s+/, $a);
+my @b = split(/\s+/, $b);
+
+die '@a and @b must have the same size' unless @a == @b;
+
+say sum(map { $a[$_] * $b[$_] } (0 .. @a -1));
diff --git a/challenge-145/arne-sommer/perl/ch-2.pl b/challenge-145/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..433cd2c664
--- /dev/null
+++ b/challenge-145/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,32 @@
+#! /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 $s = $ARGV[0] // 'redivider';
+
+my @result;
+my $length = length($s);
+
+for my $start (0 .. $length)
+{
+ push(@result, substr($s, $start, 1));
+
+ next if $start > $length -2;
+
+ for my $stop ($start +1 .. $length -1)
+ {
+ my $candidate = substr($s, $start, $stop - $start +1);
+ say ": [$start,$stop] $candidate" if $verbose;
+ push(@result, $candidate) if reverse($candidate) eq $candidate;
+ }
+}
+
+say join(" ", uniq @result);
diff --git a/challenge-145/arne-sommer/perl/dot-product-perl b/challenge-145/arne-sommer/perl/dot-product-perl
new file mode 100755
index 0000000000..0bc6e3d5ef
--- /dev/null
+++ b/challenge-145/arne-sommer/perl/dot-product-perl
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use List::Util 'sum';
+
+my $a = shift(@ARGV) // '1 2 3';
+my $b = shift(@ARGV) // '4 5 6';
+
+my @a = split(/\s+/, $a);
+my @b = split(/\s+/, $b);
+
+die '@a and @b must have the same size' unless @a == @b;
+
+say sum(map { $a[$_] * $b[$_] } (0 .. @a -1));
diff --git a/challenge-145/arne-sommer/raku/ch-1.raku b/challenge-145/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..2c8a4cb85b
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,10 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($a = '1 2 3', $b = '4 5 6');
+
+my @a = $a.words;
+my @b = $b.words;
+
+die '@a and @b must have the same size' unless @a.elems == @b.elems;
+
+say (@a Z* @b).sum;
diff --git a/challenge-145/arne-sommer/raku/ch-2.raku b/challenge-145/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..927df0cb8e
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($s is copy = 'redivider', :v(:$verbose));
+
+my @result;
+my $length = $s.chars;
+
+for 0 .. $length -> $start
+{
+ @result.push: $s.substr($start,1);
+
+ next if $start > $length -2;
+
+ for $start +1 .. $length -1 -> $stop
+ {
+ my $candidate = $s.substr($start, $stop - $start +1);
+ say ": [$start,$stop] $candidate" if $verbose;
+ @result.push: $candidate if $candidate.flip eq $candidate;
+ }
+}
+
+say @result.unique.join(" ");
diff --git a/challenge-145/arne-sommer/raku/dot-product b/challenge-145/arne-sommer/raku/dot-product
new file mode 100755
index 0000000000..de71a5667a
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/dot-product
@@ -0,0 +1,10 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($a = '1 2 3', $b = '4 5 6');
+
+my @a = $a.words;
+my @b = $b.words;
+
+die '@a and @b must have the same size' unless @a.elems == @b.elems;
+
+say (^@a.elems).map({ @a[$_] * @b[$_] }).sum;
diff --git a/challenge-145/arne-sommer/raku/dot-product-Z b/challenge-145/arne-sommer/raku/dot-product-Z
new file mode 100755
index 0000000000..2c8a4cb85b
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/dot-product-Z
@@ -0,0 +1,10 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($a = '1 2 3', $b = '4 5 6');
+
+my @a = $a.words;
+my @b = $b.words;
+
+die '@a and @b must have the same size' unless @a.elems == @b.elems;
+
+say (@a Z* @b).sum;
diff --git a/challenge-145/arne-sommer/raku/palindromic-tree b/challenge-145/arne-sommer/raku/palindromic-tree
new file mode 100755
index 0000000000..bd6f48854d
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/palindromic-tree
@@ -0,0 +1,50 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($s is copy = 'redivider', :v(:$verbose));
+
+my @result;
+my %seen;
+
+while ($s.chars)
+{
+ my $letter = $s.substr(0,1);
+ @result.push: $letter unless %seen{$letter};
+ %seen{$letter} = True;
+
+ last if $s.chars == 1;
+
+ my $is-palindromic = is-palindromic($s);
+
+ if ($is-palindromic)
+ {
+ my $new = $s.substr(0, $is-palindromic);
+ @result.push: $new;
+
+ if ($is-palindromic == $s.chars)
+ {
+ $s = $s.substr(1, $is-palindromic -2);
+ }
+ else
+ {
+ $s = $s.substr(1, $is-palindromic -1) ~ $s.substr($is-palindromic);
+ }
+ }
+ else
+ {
+ $s = $s.substr(1);
+ }
+
+ say "Result: @result[] | Todo: $s" if $verbose;
+}
+
+say @result.join(" ");
+
+sub is-palindromic($string)
+{
+ for $string.chars ... 2 -> $end
+ {
+ my $partial = $string.substr(0, $end);
+ return $end if $partial eq $partial.flip;
+ }
+ return 0;
+}
diff --git a/challenge-145/arne-sommer/raku/palindromic-tree-reordered b/challenge-145/arne-sommer/raku/palindromic-tree-reordered
new file mode 100755
index 0000000000..927df0cb8e
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/palindromic-tree-reordered
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($s is copy = 'redivider', :v(:$verbose));
+
+my @result;
+my $length = $s.chars;
+
+for 0 .. $length -> $start
+{
+ @result.push: $s.substr($start,1);
+
+ next if $start > $length -2;
+
+ for $start +1 .. $length -1 -> $stop
+ {
+ my $candidate = $s.substr($start, $stop - $start +1);
+ say ": [$start,$stop] $candidate" if $verbose;
+ @result.push: $candidate if $candidate.flip eq $candidate;
+ }
+}
+
+say @result.unique.join(" ");
diff --git a/challenge-145/arne-sommer/raku/palindromic-tree-unique b/challenge-145/arne-sommer/raku/palindromic-tree-unique
new file mode 100755
index 0000000000..5122bc81c8
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/palindromic-tree-unique
@@ -0,0 +1,48 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($s is copy = 'redivider', :v(:$verbose));
+
+my @result;
+
+while ($s.chars)
+{
+ my $letter = $s.substr(0,1);
+ @result.push: $letter;
+
+ last if $s.chars == 1;
+
+ my $is-palindromic = is-palindromic($s);
+
+ if ($is-palindromic)
+ {
+ my $new = $s.substr(0, $is-palindromic);
+ @result.push: $new;
+
+ if ($is-palindromic == $s.chars)
+ {
+ $s = $s.substr(1, $is-palindromic -2);
+ }
+ else
+ {
+ $s = $s.substr(1, $is-palindromic -1) ~ $s.substr($is-palindromic);
+ }
+ }
+ else
+ {
+ $s = $s.substr(1);
+ }
+
+ say "Result: @result[] | Todo: $s" if $verbose;
+}
+
+say @result.unique.join(" ");
+
+sub is-palindromic($string)
+{
+ for $string.chars ... 2 -> $end
+ {
+ my $partial = $string.substr(0, $end);
+ return $end if $partial eq $partial.flip;
+ }
+ return 0;
+}
diff --git a/challenge-145/arne-sommer/raku/palindromic-tree-unordered b/challenge-145/arne-sommer/raku/palindromic-tree-unordered
new file mode 100755
index 0000000000..38ea65e19f
--- /dev/null
+++ b/challenge-145/arne-sommer/raku/palindromic-tree-unordered
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($s is copy = 'redivider', :v(:$verbose));
+
+my @result = $s.comb;
+my $length = $s.chars;
+
+for 0 .. $length -2 -> $start
+{
+ for $start +1 .. $length -1 -> $stop
+ {
+ my $candidate = $s.substr($start, $stop - $start +1);
+ say ": [$start,$stop] $candidate" if $verbose;
+ @result.push: $candidate if $candidate.flip eq $candidate;
+ }
+}
+
+say @result.unique.join(" ");