diff options
| author | arnesom <arne@bbop.org> | 2022-06-12 20:42:18 +0200 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2022-06-12 20:42:18 +0200 |
| commit | bb8c71f8839ade9eac84123d51df1920b0e87a0a (patch) | |
| tree | e5e1480eadeb2d019b7de07d42524a95a68a7bc0 /challenge-168 | |
| parent | 4da5332e944d8b759384eff494a6045a53401bbd (diff) | |
| download | perlweeklychallenge-club-bb8c71f8839ade9eac84123d51df1920b0e87a0a.tar.gz perlweeklychallenge-club-bb8c71f8839ade9eac84123d51df1920b0e87a0a.tar.bz2 perlweeklychallenge-club-bb8c71f8839ade9eac84123d51df1920b0e87a0a.zip | |
Arne Sommer
Diffstat (limited to 'challenge-168')
| -rw-r--r-- | challenge-168/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/perl/ch-1.pl | 43 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/perl/ch-2.pl | 36 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/perl/home-prime-perl | 36 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/perl/perrin-prime-perl | 43 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/perl/perrin-seq-perl | 28 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/raku/ch-1.raku | 7 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/raku/ch-2.raku | 26 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/raku/home-prime | 26 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/raku/perrin-prime | 7 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/raku/perrin-prime-sorted | 7 | ||||
| -rwxr-xr-x | challenge-168/arne-sommer/raku/perrin-seq | 7 |
12 files changed, 267 insertions, 0 deletions
diff --git a/challenge-168/arne-sommer/blog.txt b/challenge-168/arne-sommer/blog.txt new file mode 100644 index 0000000000..1f1d514436 --- /dev/null +++ b/challenge-168/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/primarily-prime.html diff --git a/challenge-168/arne-sommer/perl/ch-1.pl b/challenge-168/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..71a9c75c3b --- /dev/null +++ b/challenge-168/arne-sommer/perl/ch-1.pl @@ -0,0 +1,43 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use feature 'state'; +use bigint; +use Math::Prime::Util 'is_prime'; + +no warnings qw(experimental::signatures); + +my $count = $ARGV[0] || 13; + +sub next_perrin +{ + state @perrin; + + if (! @perrin) + { + @perrin = (3,0,2); + } + else + { + push(@perrin, $perrin[-2] + $perrin[-3]); + } + + shift @perrin if @perrin == 4; + + return $perrin[-1]; +} + +my @pp; + +while (@pp < $count) +{ + my $next = next_perrin; + next if @pp && $next <= $pp[-1]; + next unless is_prime($next); + push(@pp, $next); +} + +say join(", ", @pp); diff --git a/challenge-168/arne-sommer/perl/ch-2.pl b/challenge-168/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..f27b48617d --- /dev/null +++ b/challenge-168/arne-sommer/perl/ch-2.pl @@ -0,0 +1,36 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +no warnings 'experimental::signatures'; + +use Math::Prime::Util 'is_prime'; + +my $number = int($ARGV[0]) || 0; + +die "Please specify an integer >= 2" unless $number =~ /^[1-9]\d*$/ && $number > 1; + +$number = join("", factors($number)) until is_prime($number); + +say $number; + +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-168/arne-sommer/perl/home-prime-perl b/challenge-168/arne-sommer/perl/home-prime-perl new file mode 100755 index 0000000000..f27b48617d --- /dev/null +++ b/challenge-168/arne-sommer/perl/home-prime-perl @@ -0,0 +1,36 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +no warnings 'experimental::signatures'; + +use Math::Prime::Util 'is_prime'; + +my $number = int($ARGV[0]) || 0; + +die "Please specify an integer >= 2" unless $number =~ /^[1-9]\d*$/ && $number > 1; + +$number = join("", factors($number)) until is_prime($number); + +say $number; + +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-168/arne-sommer/perl/perrin-prime-perl b/challenge-168/arne-sommer/perl/perrin-prime-perl new file mode 100755 index 0000000000..71a9c75c3b --- /dev/null +++ b/challenge-168/arne-sommer/perl/perrin-prime-perl @@ -0,0 +1,43 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use feature 'state'; +use bigint; +use Math::Prime::Util 'is_prime'; + +no warnings qw(experimental::signatures); + +my $count = $ARGV[0] || 13; + +sub next_perrin +{ + state @perrin; + + if (! @perrin) + { + @perrin = (3,0,2); + } + else + { + push(@perrin, $perrin[-2] + $perrin[-3]); + } + + shift @perrin if @perrin == 4; + + return $perrin[-1]; +} + +my @pp; + +while (@pp < $count) +{ + my $next = next_perrin; + next if @pp && $next <= $pp[-1]; + next unless is_prime($next); + push(@pp, $next); +} + +say join(", ", @pp); diff --git a/challenge-168/arne-sommer/perl/perrin-seq-perl b/challenge-168/arne-sommer/perl/perrin-seq-perl new file mode 100755 index 0000000000..58c81a5222 --- /dev/null +++ b/challenge-168/arne-sommer/perl/perrin-seq-perl @@ -0,0 +1,28 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use feature 'state'; + +no warnings qw(experimental::signatures); + +my $count = $ARGV[0] || 10; + +sub next_perrin +{ + state @perrin = (3, 0, 2); + state $index = 0; + + while (@perrin <= $index) + { + push(@perrin, $perrin[-2] + $perrin[-3]); + } + + return $perrin[$index++]; +} + +my @ps; push(@ps, next_perrin($_)) for 1..$count; + +say join(", ", @ps); diff --git a/challenge-168/arne-sommer/raku/ch-1.raku b/challenge-168/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..17984ce714 --- /dev/null +++ b/challenge-168/arne-sommer/raku/ch-1.raku @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int :c(:$count) where $count > 1 = 13); + +my $pp := ( 3, 0, 2, ( * + * + * * 0 ) ... Inf).unique.grep( *.is-prime ); + +say $pp[^$count].sort.join(", "); diff --git a/challenge-168/arne-sommer/raku/ch-2.raku b/challenge-168/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..3f0e3120ed --- /dev/null +++ b/challenge-168/arne-sommer/raku/ch-2.raku @@ -0,0 +1,26 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $number is copy where $number > 1); + +$number = factors($number).join.Int until $number.is-prime; + +say $number; + +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-168/arne-sommer/raku/home-prime b/challenge-168/arne-sommer/raku/home-prime new file mode 100755 index 0000000000..3f0e3120ed --- /dev/null +++ b/challenge-168/arne-sommer/raku/home-prime @@ -0,0 +1,26 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $number is copy where $number > 1); + +$number = factors($number).join.Int until $number.is-prime; + +say $number; + +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-168/arne-sommer/raku/perrin-prime b/challenge-168/arne-sommer/raku/perrin-prime new file mode 100755 index 0000000000..3aafa09e31 --- /dev/null +++ b/challenge-168/arne-sommer/raku/perrin-prime @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (:c(:$count) = 13); + +my $pp := ( 3, 0, 2, ( * + * + * * 0 ) ... Inf).unique.grep( *.is-prime ); + +say $pp[^$count].join(", "); diff --git a/challenge-168/arne-sommer/raku/perrin-prime-sorted b/challenge-168/arne-sommer/raku/perrin-prime-sorted new file mode 100755 index 0000000000..17984ce714 --- /dev/null +++ b/challenge-168/arne-sommer/raku/perrin-prime-sorted @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int :c(:$count) where $count > 1 = 13); + +my $pp := ( 3, 0, 2, ( * + * + * * 0 ) ... Inf).unique.grep( *.is-prime ); + +say $pp[^$count].sort.join(", "); diff --git a/challenge-168/arne-sommer/raku/perrin-seq b/challenge-168/arne-sommer/raku/perrin-seq new file mode 100755 index 0000000000..74ea791e06 --- /dev/null +++ b/challenge-168/arne-sommer/raku/perrin-seq @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int :c(:$count) where $count > 1 = 10); + +my $perrin := ( 3, 0, 2, ( * + * + * * 0 ) ... Inf); + +say $perrin[^$count].join(", "); |
