aboutsummaryrefslogtreecommitdiff
path: root/challenge-144
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2021-12-26 20:46:58 +0100
committerarnesom <arne@bbop.org>2021-12-26 20:46:58 +0100
commit4fc4ed88faefadf62389d4b0b9a28c10c7fc1259 (patch)
treef4f0e077a40252dd6b4ddd33f31e56c44ac6b48e /challenge-144
parent3a7fb927307379681cb13dcb23cb3ed24126f19e (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-144/arne-sommer/perl/ch-1.pl24
-rwxr-xr-xchallenge-144/arne-sommer/perl/semi-prime-perl24
-rwxr-xr-xchallenge-144/arne-sommer/raku/ch-1.raku20
-rwxr-xr-xchallenge-144/arne-sommer/raku/ch-2.raku40
-rwxr-xr-xchallenge-144/arne-sommer/raku/semi-prime20
-rwxr-xr-xchallenge-144/arne-sommer/raku/ulam-sequence40
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');
+}