diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-02-06 18:37:55 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-06 18:37:55 +0000 |
| commit | 80833add13dcaeca8411cbf0fa3868b52e739132 (patch) | |
| tree | 0f61b731802b5c85e7531a069287e7e41b1d6dee /challenge-150 | |
| parent | 289b0c07c28cd602e3bab4eea7b1085bc1e14a7f (diff) | |
| parent | 51595566387cccaf71b2bae03390cabca8950e83 (diff) | |
| download | perlweeklychallenge-club-80833add13dcaeca8411cbf0fa3868b52e739132.tar.gz perlweeklychallenge-club-80833add13dcaeca8411cbf0fa3868b52e739132.tar.bz2 perlweeklychallenge-club-80833add13dcaeca8411cbf0fa3868b52e739132.zip | |
Merge pull request #5617 from arnesom/branch-for-challenge-150
Arne Sommer
Diffstat (limited to 'challenge-150')
| -rw-r--r-- | challenge-150/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/perl/ch-1.pl | 33 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/perl/ch-2.pl | 37 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/perl/fibonacci-words-perl | 33 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/perl/square-free-integers-perl | 37 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/raku/ch-1.raku | 14 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/raku/ch-2.raku | 24 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/raku/fibonacci-words | 20 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/raku/fibonacci-words-while | 14 | ||||
| -rwxr-xr-x | challenge-150/arne-sommer/raku/square-free-integers | 24 |
10 files changed, 237 insertions, 0 deletions
diff --git a/challenge-150/arne-sommer/blog.txt b/challenge-150/arne-sommer/blog.txt new file mode 100644 index 0000000000..4af325880c --- /dev/null +++ b/challenge-150/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/fibonacci-squared-again.html diff --git a/challenge-150/arne-sommer/perl/ch-1.pl b/challenge-150/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..4ff561d040 --- /dev/null +++ b/challenge-150/arne-sommer/perl/ch-1.pl @@ -0,0 +1,33 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $a = $ARGV[0] || 1234; +my $b = $ARGV[1] || 5678; +my $i = 4; + +die 'Please specify digits only for $a' unless $a =~ /^\d+$/; +die 'Please specify digits only for $b' unless $b =~ /^\d+$/; + +say ": 1: $a" if $verbose; +say ": 2: $b" if $verbose; + +($a, $b) = ($b, $a . $b); + +say ": 3: $b" if $verbose; + +while (length($b) < 51) +{ + ($a, $b) = ($b, $a . $b); + say ": " . $i++ . ": $b" if $verbose; +} + +say substr($b, 50, 1); diff --git a/challenge-150/arne-sommer/perl/ch-2.pl b/challenge-150/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..90a8d61c09 --- /dev/null +++ b/challenge-150/arne-sommer/perl/ch-2.pl @@ -0,0 +1,37 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +no warnings 'experimental::signatures'; + +use Math::Prime::Util 'is_prime'; +use List::MoreUtils 'duplicates'; + +my $limit = $ARGV[0] || 500; + +die "Please specify a positive integer" unless $limit =~ /^[1-9]\d*$/; + +my @result = grep { ! duplicates factors($_) } (1 .. $limit); + +say join(", ", @result); + +sub factors ($number) +{ + return (1) if $number == 1; + return ($number) if is_prime($number); + + my @factors; + + for my $candidate (grep { is_prime($_) } 2 .. $number / 2) + { + while ($number % $candidate == 0) + { + push(@factors, $candidate); + $number /= $candidate; + } + } + + return @factors; +} diff --git a/challenge-150/arne-sommer/perl/fibonacci-words-perl b/challenge-150/arne-sommer/perl/fibonacci-words-perl new file mode 100755 index 0000000000..4ff561d040 --- /dev/null +++ b/challenge-150/arne-sommer/perl/fibonacci-words-perl @@ -0,0 +1,33 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $a = $ARGV[0] || 1234; +my $b = $ARGV[1] || 5678; +my $i = 4; + +die 'Please specify digits only for $a' unless $a =~ /^\d+$/; +die 'Please specify digits only for $b' unless $b =~ /^\d+$/; + +say ": 1: $a" if $verbose; +say ": 2: $b" if $verbose; + +($a, $b) = ($b, $a . $b); + +say ": 3: $b" if $verbose; + +while (length($b) < 51) +{ + ($a, $b) = ($b, $a . $b); + say ": " . $i++ . ": $b" if $verbose; +} + +say substr($b, 50, 1); diff --git a/challenge-150/arne-sommer/perl/square-free-integers-perl b/challenge-150/arne-sommer/perl/square-free-integers-perl new file mode 100755 index 0000000000..90a8d61c09 --- /dev/null +++ b/challenge-150/arne-sommer/perl/square-free-integers-perl @@ -0,0 +1,37 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +no warnings 'experimental::signatures'; + +use Math::Prime::Util 'is_prime'; +use List::MoreUtils 'duplicates'; + +my $limit = $ARGV[0] || 500; + +die "Please specify a positive integer" unless $limit =~ /^[1-9]\d*$/; + +my @result = grep { ! duplicates factors($_) } (1 .. $limit); + +say join(", ", @result); + +sub factors ($number) +{ + return (1) if $number == 1; + return ($number) if is_prime($number); + + my @factors; + + for my $candidate (grep { is_prime($_) } 2 .. $number / 2) + { + while ($number % $candidate == 0) + { + push(@factors, $candidate); + $number /= $candidate; + } + } + + return @factors; +} diff --git a/challenge-150/arne-sommer/raku/ch-1.raku b/challenge-150/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..d017d15c86 --- /dev/null +++ b/challenge-150/arne-sommer/raku/ch-1.raku @@ -0,0 +1,14 @@ +#! /usr/bin/env raku + +subset DigitStr where * ~~ /^<[0..9]>+$/; + +unit sub MAIN (DigitStr $a, DigitStr $b); + +for ($a, $b, * ~ * ... *) -> $current +{ + if $current.chars >= 51 + { + say $current.substr(50, 1); + last; + } +} diff --git a/challenge-150/arne-sommer/raku/ch-2.raku b/challenge-150/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..f1eee66596 --- /dev/null +++ b/challenge-150/arne-sommer/raku/ch-2.raku @@ -0,0 +1,24 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $limit where $limit > 0 = 500); + +say (1 .. $limit).grep( { factors($_).repeated.elems == 0 }).join(", "); + +sub factors ($number is copy) +{ + return (1) if $number == 1; + return ($number) if $number.is-prime; + + my @factors; + + for (2 .. $number div 2).grep( *.is-prime) -> $candidate + { + while $number %% $candidate + { + @factors.push: $candidate; + $number /= $candidate; + } + } + + return @factors; +} diff --git a/challenge-150/arne-sommer/raku/fibonacci-words b/challenge-150/arne-sommer/raku/fibonacci-words new file mode 100755 index 0000000000..6a34ec4e1c --- /dev/null +++ b/challenge-150/arne-sommer/raku/fibonacci-words @@ -0,0 +1,20 @@ +#! /usr/bin/env raku + +subset DigitStr where * ~~ /^<[0..9]>+$/; + +unit sub MAIN (DigitStr $a, DigitStr $b, :v(:$verbose)); + +my $fw := ($a, $b, * ~ * ... *); + +for ^Inf -> $index +{ + my $current = $fw[$index]; + + say ": { $index +1 }: $current" if $verbose; + + if $current.chars >= 51 + { + say $current.substr(50, 1); + last; + } +} diff --git a/challenge-150/arne-sommer/raku/fibonacci-words-while b/challenge-150/arne-sommer/raku/fibonacci-words-while new file mode 100755 index 0000000000..d017d15c86 --- /dev/null +++ b/challenge-150/arne-sommer/raku/fibonacci-words-while @@ -0,0 +1,14 @@ +#! /usr/bin/env raku + +subset DigitStr where * ~~ /^<[0..9]>+$/; + +unit sub MAIN (DigitStr $a, DigitStr $b); + +for ($a, $b, * ~ * ... *) -> $current +{ + if $current.chars >= 51 + { + say $current.substr(50, 1); + last; + } +} diff --git a/challenge-150/arne-sommer/raku/square-free-integers b/challenge-150/arne-sommer/raku/square-free-integers new file mode 100755 index 0000000000..f1eee66596 --- /dev/null +++ b/challenge-150/arne-sommer/raku/square-free-integers @@ -0,0 +1,24 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $limit where $limit > 0 = 500); + +say (1 .. $limit).grep( { factors($_).repeated.elems == 0 }).join(", "); + +sub factors ($number is copy) +{ + return (1) if $number == 1; + return ($number) if $number.is-prime; + + my @factors; + + for (2 .. $number div 2).grep( *.is-prime) -> $candidate + { + while $number %% $candidate + { + @factors.push: $candidate; + $number /= $candidate; + } + } + + return @factors; +} |
