diff options
| author | arnesom <arne@bbop.org> | 2021-12-26 20:46:58 +0100 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2021-12-26 20:46:58 +0100 |
| commit | 4fc4ed88faefadf62389d4b0b9a28c10c7fc1259 (patch) | |
| tree | f4f0e077a40252dd6b4ddd33f31e56c44ac6b48e /challenge-144 | |
| parent | 3a7fb927307379681cb13dcb23cb3ed24126f19e (diff) | |
| download | perlweeklychallenge-club-4fc4ed88faefadf62389d4b0b9a28c10c7fc1259.tar.gz perlweeklychallenge-club-4fc4ed88faefadf62389d4b0b9a28c10c7fc1259.tar.bz2 perlweeklychallenge-club-4fc4ed88faefadf62389d4b0b9a28c10c7fc1259.zip | |
Arne Sommer
Diffstat (limited to 'challenge-144')
| -rw-r--r-- | challenge-144/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-144/arne-sommer/perl/ch-1.pl | 24 | ||||
| -rwxr-xr-x | challenge-144/arne-sommer/perl/semi-prime-perl | 24 | ||||
| -rwxr-xr-x | challenge-144/arne-sommer/raku/ch-1.raku | 20 | ||||
| -rwxr-xr-x | challenge-144/arne-sommer/raku/ch-2.raku | 40 | ||||
| -rwxr-xr-x | challenge-144/arne-sommer/raku/semi-prime | 20 | ||||
| -rwxr-xr-x | challenge-144/arne-sommer/raku/ulam-sequence | 40 |
7 files changed, 169 insertions, 0 deletions
diff --git a/challenge-144/arne-sommer/blog.txt b/challenge-144/arne-sommer/blog.txt new file mode 100644 index 0000000000..24f1b7283a --- /dev/null +++ b/challenge-144/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/primarily-ulam.html diff --git a/challenge-144/arne-sommer/perl/ch-1.pl b/challenge-144/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..a20698dbc9 --- /dev/null +++ b/challenge-144/arne-sommer/perl/ch-1.pl @@ -0,0 +1,24 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Math::Prime::Util 'is_prime'; +use List::Util 'uniq'; + +my $limit = 100; +my @primes = grep { is_prime($_) } (1 .. $limit / 2); + +my @result; + +for my $a (@primes) +{ + for my $b (@primes) + { + my $product = $a * $b; + push(@result, $product) if $product <= $limit; + } +} + +say join(", ", uniq sort{ $a <=> $b } @result); diff --git a/challenge-144/arne-sommer/perl/semi-prime-perl b/challenge-144/arne-sommer/perl/semi-prime-perl new file mode 100755 index 0000000000..a20698dbc9 --- /dev/null +++ b/challenge-144/arne-sommer/perl/semi-prime-perl @@ -0,0 +1,24 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Math::Prime::Util 'is_prime'; +use List::Util 'uniq'; + +my $limit = 100; +my @primes = grep { is_prime($_) } (1 .. $limit / 2); + +my @result; + +for my $a (@primes) +{ + for my $b (@primes) + { + my $product = $a * $b; + push(@result, $product) if $product <= $limit; + } +} + +say join(", ", uniq sort{ $a <=> $b } @result); diff --git a/challenge-144/arne-sommer/raku/ch-1.raku b/challenge-144/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..67426db767 --- /dev/null +++ b/challenge-144/arne-sommer/raku/ch-1.raku @@ -0,0 +1,20 @@ +#! /usr/bin/env raku + +subset PosInt of Int where * > 0; + +unit sub MAIN (PosInt $limit = 100); + +my @primes = (1 .. $limit div 2).grep( *.is-prime); + +my @result; + +for @primes -> $a +{ + for @primes -> $b + { + my $product = $a * $b; + @result.push: $product if $product <= $limit; + } +} + +say @result.sort.squish.join(", "); diff --git a/challenge-144/arne-sommer/raku/ch-2.raku b/challenge-144/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..f8fde92f66 --- /dev/null +++ b/challenge-144/arne-sommer/raku/ch-2.raku @@ -0,0 +1,40 @@ +#! /usr/bin/env raku + +subset PosInt of Int where * > 0; + +unit sub MAIN (PosInt $u, PosInt $v where $v > $u, :l(:$limit) = 10, :v(:$verbose)); + +my $size = $limit.chars; + +my $ulam := gather +{ + my @ulam = ($u.Int, $v.Int); + my $index = 1; + + say ": { indent(1, $size) }: @ulam[0]" if $verbose; + take @ulam[0]; + + say ": { indent(2, $size) }: @ulam[1]" if $verbose; + take @ulam[1]; + + loop + { + my @sum = @ulam.combinations(2)>>.sum.grep( * > @ulam[$index] ); + say ": { indent($index + 2, $size) }: { @sum.sort.join(", ") } (with duplicates)" if $verbose; + + my @bag = @sum.Bag.grep( *.value == 1 ).map( *.key ).sort; + say ": { ' ' x $size } { @bag.join(", ") } (no duplicates)" if $verbose; + + my $min = @bag.min; + @ulam[++$index] = $min; + + take $min; + } +} + +say $ulam[^$limit].join(", "); + +sub indent ($number, $size) +{ + return $number.fmt('%' ~ $size ~ 'd'); +} diff --git a/challenge-144/arne-sommer/raku/semi-prime b/challenge-144/arne-sommer/raku/semi-prime new file mode 100755 index 0000000000..67426db767 --- /dev/null +++ b/challenge-144/arne-sommer/raku/semi-prime @@ -0,0 +1,20 @@ +#! /usr/bin/env raku + +subset PosInt of Int where * > 0; + +unit sub MAIN (PosInt $limit = 100); + +my @primes = (1 .. $limit div 2).grep( *.is-prime); + +my @result; + +for @primes -> $a +{ + for @primes -> $b + { + my $product = $a * $b; + @result.push: $product if $product <= $limit; + } +} + +say @result.sort.squish.join(", "); diff --git a/challenge-144/arne-sommer/raku/ulam-sequence b/challenge-144/arne-sommer/raku/ulam-sequence new file mode 100755 index 0000000000..f8fde92f66 --- /dev/null +++ b/challenge-144/arne-sommer/raku/ulam-sequence @@ -0,0 +1,40 @@ +#! /usr/bin/env raku + +subset PosInt of Int where * > 0; + +unit sub MAIN (PosInt $u, PosInt $v where $v > $u, :l(:$limit) = 10, :v(:$verbose)); + +my $size = $limit.chars; + +my $ulam := gather +{ + my @ulam = ($u.Int, $v.Int); + my $index = 1; + + say ": { indent(1, $size) }: @ulam[0]" if $verbose; + take @ulam[0]; + + say ": { indent(2, $size) }: @ulam[1]" if $verbose; + take @ulam[1]; + + loop + { + my @sum = @ulam.combinations(2)>>.sum.grep( * > @ulam[$index] ); + say ": { indent($index + 2, $size) }: { @sum.sort.join(", ") } (with duplicates)" if $verbose; + + my @bag = @sum.Bag.grep( *.value == 1 ).map( *.key ).sort; + say ": { ' ' x $size } { @bag.join(", ") } (no duplicates)" if $verbose; + + my $min = @bag.min; + @ulam[++$index] = $min; + + take $min; + } +} + +say $ulam[^$limit].join(", "); + +sub indent ($number, $size) +{ + return $number.fmt('%' ~ $size ~ 'd'); +} |
