aboutsummaryrefslogtreecommitdiff
path: root/challenge-105
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2021-03-27 23:33:50 +0100
committerarnesom <arne@bbop.org>2021-03-27 23:33:50 +0100
commit385b0a9fde9babad9ceca4fe1d67d5d1db8eb666 (patch)
tree24ba4bef254da27e3e62b1437021cf7293ea9a61 /challenge-105
parentf92ef7395704bf570cde574f3d74b63ddc77ebb9 (diff)
downloadperlweeklychallenge-club-385b0a9fde9babad9ceca4fe1d67d5d1db8eb666.tar.gz
perlweeklychallenge-club-385b0a9fde9babad9ceca4fe1d67d5d1db8eb666.tar.bz2
perlweeklychallenge-club-385b0a9fde9babad9ceca4fe1d67d5d1db8eb666.zip
Arne Sommer
Diffstat (limited to 'challenge-105')
-rw-r--r--challenge-105/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-105/arne-sommer/perl/ch-1.pl57
-rwxr-xr-xchallenge-105/arne-sommer/perl/ch-2.pl23
-rwxr-xr-xchallenge-105/arne-sommer/perl/name-game-perl23
-rwxr-xr-xchallenge-105/arne-sommer/perl/nth-root-perl57
-rwxr-xr-xchallenge-105/arne-sommer/raku/ch-1.raku40
-rwxr-xr-xchallenge-105/arne-sommer/raku/ch-2.raku13
-rwxr-xr-xchallenge-105/arne-sommer/raku/name-game13
-rwxr-xr-xchallenge-105/arne-sommer/raku/nth-root26
-rwxr-xr-xchallenge-105/arne-sommer/raku/nth-root-better40
10 files changed, 293 insertions, 0 deletions
diff --git a/challenge-105/arne-sommer/blog.txt b/challenge-105/arne-sommer/blog.txt
new file mode 100644
index 0000000000..f97353634f
--- /dev/null
+++ b/challenge-105/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/named-roots.html
diff --git a/challenge-105/arne-sommer/perl/ch-1.pl b/challenge-105/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..557173d757
--- /dev/null
+++ b/challenge-105/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,57 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature 'signatures';
+use feature 'say';
+use Getopt::Long;
+
+no warnings qw(experimental::signatures);
+
+my $N = 0;
+my $k = 0;
+my $iterations = 10;
+my $best = 0;
+my $verbose = 0;
+
+GetOptions("N=i" => \$N,
+ "k=i" => \$k,
+ "i=i" => \$iterations,
+ "b" => \$best,
+ "v" => \$verbose);
+
+my $start = 1;
+
+$start++ while ($start + 1) ** $N < $k;
+
+say ": Start: $start" if $verbose;
+
+my @seq; $seq[0] = $start;
+
+sub get_iteration ($index)
+{
+ unless (defined $seq[$index])
+ {
+ $seq[$index] = (1/$N) * ( ($N - 1) * get_iteration($index -1) + ($k / get_iteration($index -1) ** ($N - 1) ));
+ }
+ return $seq[$index]
+}
+
+if ($best)
+{
+ my $index = 0;
+ my $current = get_iteration($index++);
+ $current = get_iteration($index++) while $current != get_iteration($index);
+
+ say ": ", join(" | ", @seq) if $verbose;
+
+ say $seq[$index];
+}
+else
+{
+ my $value = get_iteration($iterations -1);
+ say ": ", join(" | ", @seq) if $verbose;
+
+ say $value;
+}
diff --git a/challenge-105/arne-sommer/perl/ch-2.pl b/challenge-105/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..61c3445bdc
--- /dev/null
+++ b/challenge-105/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,23 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature 'say';
+use Getopt::Long;
+use Perl6::Junction 'any';
+
+my $y_is_a_vowel = 0;
+
+GetOptions("y_is_a_vowel" => \$y_is_a_vowel);
+
+my $x = shift(@ARGV) // die 'Please specify the name';
+
+my @vowels = $y_is_a_vowel ? qw/a e i o u y/ : qw/a e i o u/;
+
+my $y = lc(substr($x,0,1)) eq any(@vowels) ? lc($x) : substr($x, 1);
+
+say "$x, $x, bo-", ( lc(substr($x,0,1)) eq "b" ? $y : "b$y" );
+say "Bonana-fanna fo-", ( lc(substr($x,0,1)) eq "f" ? $y : "f$y" );
+say "Fee fi mo-", ( lc(substr($x,0,1)) eq "m" ? $y : "m$y" );
+say "$x!";
diff --git a/challenge-105/arne-sommer/perl/name-game-perl b/challenge-105/arne-sommer/perl/name-game-perl
new file mode 100755
index 0000000000..61c3445bdc
--- /dev/null
+++ b/challenge-105/arne-sommer/perl/name-game-perl
@@ -0,0 +1,23 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature 'say';
+use Getopt::Long;
+use Perl6::Junction 'any';
+
+my $y_is_a_vowel = 0;
+
+GetOptions("y_is_a_vowel" => \$y_is_a_vowel);
+
+my $x = shift(@ARGV) // die 'Please specify the name';
+
+my @vowels = $y_is_a_vowel ? qw/a e i o u y/ : qw/a e i o u/;
+
+my $y = lc(substr($x,0,1)) eq any(@vowels) ? lc($x) : substr($x, 1);
+
+say "$x, $x, bo-", ( lc(substr($x,0,1)) eq "b" ? $y : "b$y" );
+say "Bonana-fanna fo-", ( lc(substr($x,0,1)) eq "f" ? $y : "f$y" );
+say "Fee fi mo-", ( lc(substr($x,0,1)) eq "m" ? $y : "m$y" );
+say "$x!";
diff --git a/challenge-105/arne-sommer/perl/nth-root-perl b/challenge-105/arne-sommer/perl/nth-root-perl
new file mode 100755
index 0000000000..557173d757
--- /dev/null
+++ b/challenge-105/arne-sommer/perl/nth-root-perl
@@ -0,0 +1,57 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature 'signatures';
+use feature 'say';
+use Getopt::Long;
+
+no warnings qw(experimental::signatures);
+
+my $N = 0;
+my $k = 0;
+my $iterations = 10;
+my $best = 0;
+my $verbose = 0;
+
+GetOptions("N=i" => \$N,
+ "k=i" => \$k,
+ "i=i" => \$iterations,
+ "b" => \$best,
+ "v" => \$verbose);
+
+my $start = 1;
+
+$start++ while ($start + 1) ** $N < $k;
+
+say ": Start: $start" if $verbose;
+
+my @seq; $seq[0] = $start;
+
+sub get_iteration ($index)
+{
+ unless (defined $seq[$index])
+ {
+ $seq[$index] = (1/$N) * ( ($N - 1) * get_iteration($index -1) + ($k / get_iteration($index -1) ** ($N - 1) ));
+ }
+ return $seq[$index]
+}
+
+if ($best)
+{
+ my $index = 0;
+ my $current = get_iteration($index++);
+ $current = get_iteration($index++) while $current != get_iteration($index);
+
+ say ": ", join(" | ", @seq) if $verbose;
+
+ say $seq[$index];
+}
+else
+{
+ my $value = get_iteration($iterations -1);
+ say ": ", join(" | ", @seq) if $verbose;
+
+ say $value;
+}
diff --git a/challenge-105/arne-sommer/raku/ch-1.raku b/challenge-105/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..e75cc515e1
--- /dev/null
+++ b/challenge-105/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,40 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:$N, :$k, :i($iterations) = 10, :b($best), :v($verbose));
+
+my $start = 1;
+
+$start++ while ($start + 1) ** $N < $k;
+
+say ": Start: $start" if $verbose;
+
+my $seq := gather
+{
+ take $start;
+ my $index = 0;
+
+ loop
+ {
+ take (1/$N) * ( ($N - 1) * $seq[$index] + ($k / $seq[$index] ** ($N - 1) ));
+
+ $index++;
+ }
+}
+
+if $best
+{
+ my $index = 0;
+ my $current = $seq[$index++];
+ $current = $seq[$index++] while $current != $seq[$index];
+
+ say ": ", $seq[0..$index].join(" | ") if $verbose;
+
+ say $seq[$index];
+
+}
+else
+{
+ say ": ", $seq[^$iterations].join(" | ") if $verbose;
+
+ say $seq[$iterations -1];
+} \ No newline at end of file
diff --git a/challenge-105/arne-sommer/raku/ch-2.raku b/challenge-105/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..f47e93aa21
--- /dev/null
+++ b/challenge-105/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,13 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($x, :y(:$y-is-a-vowel));
+
+my @vowels = $y-is-a-vowel ?? <a e i o u y> !! <a e i o u>;
+
+my $y = $x.substr(0,1).lc eq any(@vowels) ?? $x.lc !! $x.substr(1);
+
+say
+"$x, $x, bo-{ $x.substr(0,1).lc eq "b" ?? $y !! "b$y" }
+Bonana-fanna fo-{ $x.substr(0,1).lc eq "f" ?? $y !! "f$y" }
+Fee fi mo-{ $x.substr(0,1).lc eq "m" ?? $y !! "m$y" }
+$x!"; \ No newline at end of file
diff --git a/challenge-105/arne-sommer/raku/name-game b/challenge-105/arne-sommer/raku/name-game
new file mode 100755
index 0000000000..f47e93aa21
--- /dev/null
+++ b/challenge-105/arne-sommer/raku/name-game
@@ -0,0 +1,13 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($x, :y(:$y-is-a-vowel));
+
+my @vowels = $y-is-a-vowel ?? <a e i o u y> !! <a e i o u>;
+
+my $y = $x.substr(0,1).lc eq any(@vowels) ?? $x.lc !! $x.substr(1);
+
+say
+"$x, $x, bo-{ $x.substr(0,1).lc eq "b" ?? $y !! "b$y" }
+Bonana-fanna fo-{ $x.substr(0,1).lc eq "f" ?? $y !! "f$y" }
+Fee fi mo-{ $x.substr(0,1).lc eq "m" ?? $y !! "m$y" }
+$x!"; \ No newline at end of file
diff --git a/challenge-105/arne-sommer/raku/nth-root b/challenge-105/arne-sommer/raku/nth-root
new file mode 100755
index 0000000000..6c3c848d2b
--- /dev/null
+++ b/challenge-105/arne-sommer/raku/nth-root
@@ -0,0 +1,26 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:$N, :$k, :i($iterations) = 10, :v($verbose));
+
+my $start = 1;
+
+$start++ while ($start + 1) ** $N < $k;
+
+say ": Start: $start" if $verbose;
+
+my $seq := gather
+{
+ take $start;
+ my $index = 0;
+
+ loop
+ {
+ take (1/$N) * ( ($N - 1) * $seq[$index] + ($k / $seq[$index] ** ($N - 1) ));
+
+ $index++;
+ }
+}
+
+say ": ", $seq[^$iterations].join(" | ") if $verbose;
+
+say $seq[$iterations -1];
diff --git a/challenge-105/arne-sommer/raku/nth-root-better b/challenge-105/arne-sommer/raku/nth-root-better
new file mode 100755
index 0000000000..e75cc515e1
--- /dev/null
+++ b/challenge-105/arne-sommer/raku/nth-root-better
@@ -0,0 +1,40 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:$N, :$k, :i($iterations) = 10, :b($best), :v($verbose));
+
+my $start = 1;
+
+$start++ while ($start + 1) ** $N < $k;
+
+say ": Start: $start" if $verbose;
+
+my $seq := gather
+{
+ take $start;
+ my $index = 0;
+
+ loop
+ {
+ take (1/$N) * ( ($N - 1) * $seq[$index] + ($k / $seq[$index] ** ($N - 1) ));
+
+ $index++;
+ }
+}
+
+if $best
+{
+ my $index = 0;
+ my $current = $seq[$index++];
+ $current = $seq[$index++] while $current != $seq[$index];
+
+ say ": ", $seq[0..$index].join(" | ") if $verbose;
+
+ say $seq[$index];
+
+}
+else
+{
+ say ": ", $seq[^$iterations].join(" | ") if $verbose;
+
+ say $seq[$iterations -1];
+} \ No newline at end of file