diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-01-02 18:05:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-02 18:05:29 +0000 |
| commit | 960ace31e3a337372b0c60d8e1671dc76e39fc6b (patch) | |
| tree | 0204060404048b25a65e14dce9a75d3b0e10ee7a | |
| parent | 8cc72bf3f112d1349159fe933cfcfd93cd3444ec (diff) | |
| parent | 488674e41cacb4d72a5d1efe5b837109d0ae3be7 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/perl/ch-1.pl | 16 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/perl/ch-2.pl | 32 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/perl/dot-product-perl | 16 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/ch-1.raku | 10 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/ch-2.raku | 22 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/dot-product | 10 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/dot-product-Z | 10 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/palindromic-tree | 50 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/palindromic-tree-reordered | 22 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/palindromic-tree-unique | 48 | ||||
| -rwxr-xr-x | challenge-145/arne-sommer/raku/palindromic-tree-unordered | 18 |
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(" "); |
