diff options
| author | arnesom <arne@bbop.org> | 2021-03-27 23:33:50 +0100 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2021-03-27 23:33:50 +0100 |
| commit | 385b0a9fde9babad9ceca4fe1d67d5d1db8eb666 (patch) | |
| tree | 24ba4bef254da27e3e62b1437021cf7293ea9a61 /challenge-105 | |
| parent | f92ef7395704bf570cde574f3d74b63ddc77ebb9 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/perl/ch-1.pl | 57 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/perl/ch-2.pl | 23 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/perl/name-game-perl | 23 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/perl/nth-root-perl | 57 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/raku/ch-1.raku | 40 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/raku/ch-2.raku | 13 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/raku/name-game | 13 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/raku/nth-root | 26 | ||||
| -rwxr-xr-x | challenge-105/arne-sommer/raku/nth-root-better | 40 |
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 |
