aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2022-01-23 22:14:24 +0100
committerarnesom <arne@bbop.org>2022-01-23 22:14:24 +0100
commitfd943672549c08a922f69b3220bb7c8e8635f333 (patch)
tree0983745f437bfd3451c47a52ab0c4c078c606f76
parent1e4f4126e2d174648b4125460ab8638ddfd8d523 (diff)
downloadperlweeklychallenge-club-fd943672549c08a922f69b3220bb7c8e8635f333.tar.gz
perlweeklychallenge-club-fd943672549c08a922f69b3220bb7c8e8635f333.tar.bz2
perlweeklychallenge-club-fd943672549c08a922f69b3220bb7c8e8635f333.zip
Arne Sommer
-rw-r--r--challenge-148/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-148/arne-sommer/perl/cardano-triplets-MBF-perl52
-rwxr-xr-xchallenge-148/arne-sommer/perl/cardano-triplets-perl43
-rwxr-xr-xchallenge-148/arne-sommer/perl/ch-1.pl17
-rwxr-xr-xchallenge-148/arne-sommer/perl/ch-2.pl52
-rwxr-xr-xchallenge-148/arne-sommer/perl/eban-LEN-perl17
-rwxr-xr-xchallenge-148/arne-sommer/perl/eban-MBN-perl17
-rwxr-xr-xchallenge-148/arne-sommer/raku/cardano-triplets-122
-rwxr-xr-xchallenge-148/arne-sommer/raku/cardano-triplets-232
-rwxr-xr-xchallenge-148/arne-sommer/raku/cardano-triplets-332
-rwxr-xr-xchallenge-148/arne-sommer/raku/ch-1.raku7
-rwxr-xr-xchallenge-148/arne-sommer/raku/ch-2.raku32
-rwxr-xr-xchallenge-148/arne-sommer/raku/eban-LEN7
-rwxr-xr-xchallenge-148/arne-sommer/raku/eban-LN7
-rwxr-xr-xchallenge-148/arne-sommer/raku/eban-LNWF7
15 files changed, 345 insertions, 0 deletions
diff --git a/challenge-148/arne-sommer/blog.txt b/challenge-148/arne-sommer/blog.txt
new file mode 100644
index 0000000000..acd54b6f14
--- /dev/null
+++ b/challenge-148/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/eban-cardano.html
diff --git a/challenge-148/arne-sommer/perl/cardano-triplets-MBF-perl b/challenge-148/arne-sommer/perl/cardano-triplets-MBF-perl
new file mode 100755
index 0000000000..4f51d4c284
--- /dev/null
+++ b/challenge-148/arne-sommer/perl/cardano-triplets-MBF-perl
@@ -0,0 +1,52 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+
+use Getopt::Long;
+use Math::BigFloat;
+
+no warnings qw(experimental::signatures);
+
+my $verbose = 0;
+my $limit = 21;
+my $count = 5;
+
+GetOptions("limit" => \$limit, "count" => \$count, "verbose" => \$verbose);
+
+for my $a (1 .. $limit)
+{
+ for my $b (1 .. $limit)
+ {
+ for my $c (1 .. $limit)
+ {
+ my $left = Math::BigFloat->new($a);
+ my $right = Math::BigFloat->new($a);
+
+ my $c_sqrt = Math::BigFloat->new($c)->bsqrt;
+
+ $left->badd(Math::BigFloat->new($b)->bmul($c_sqrt));
+ $right->bsub(Math::BigFloat->new($b)->bmul($c_sqrt));
+
+ say ": Considering $a, $b, $c" if $verbose;
+
+ # say "$a|$b|$c|L:$left (" . cube_root($left) . ")|R:$right(" . cube_root($right) . ")" . " " .cube_root($left)->badd(cube_root($right));
+
+ my $sum = cube_root($left)->badd(cube_root($right));
+ if ($sum->beq(1))
+ {
+ say "($a, $b, $c)";
+ exit if $count-- == 1;
+ }
+ }
+ }
+}
+
+sub cube_root ($number)
+{
+ my $third = Math::BigFloat->new(1)->bdiv(3);
+ return $number->bpow($third) unless $number->is_negative; # include zero.
+ return $number->babs()->bpow($third)->bneg();
+}
diff --git a/challenge-148/arne-sommer/perl/cardano-triplets-perl b/challenge-148/arne-sommer/perl/cardano-triplets-perl
new file mode 100755
index 0000000000..03bd094b8d
--- /dev/null
+++ b/challenge-148/arne-sommer/perl/cardano-triplets-perl
@@ -0,0 +1,43 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+
+use Getopt::Long;
+
+no warnings qw(experimental::signatures);
+
+my $verbose = 0;
+my $limit = 21;
+my $count = 5;
+
+GetOptions("limit" => \$limit, "count" => \$count, "verbose" => \$verbose);
+
+for my $a (1 .. $limit)
+{
+ for my $b (1 .. $limit)
+ {
+ for my $c (1 .. $limit)
+ {
+ my $left = $a + $b * sqrt($c);
+ my $right = $a - $b * sqrt($c);
+
+ say ": Considering $a, $b, $c" if $verbose;
+
+ if (cube_root($left) + cube_root($right) == 1)
+ {
+ say "($a, $b, $c)";
+ $count--;
+ last if $count == 0;
+ }
+ }
+ }
+}
+
+sub cube_root ($number)
+{
+ return $number ** (1/3) if $number >= 0;
+ return - ( (-$number) ** (1/3) );
+}
diff --git a/challenge-148/arne-sommer/perl/ch-1.pl b/challenge-148/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..4a20242eeb
--- /dev/null
+++ b/challenge-148/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use Lingua::EN::Numbers qw/num2en/;
+
+my $limit = int($ARGV[0] || 100);
+
+my @numbers;
+
+for my $candidate (1 .. $limit)
+{
+ push(@numbers, $candidate) unless num2en($candidate) =~ /e/;
+}
+
+say join(", ", @numbers);
diff --git a/challenge-148/arne-sommer/perl/ch-2.pl b/challenge-148/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..4f51d4c284
--- /dev/null
+++ b/challenge-148/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,52 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+
+use Getopt::Long;
+use Math::BigFloat;
+
+no warnings qw(experimental::signatures);
+
+my $verbose = 0;
+my $limit = 21;
+my $count = 5;
+
+GetOptions("limit" => \$limit, "count" => \$count, "verbose" => \$verbose);
+
+for my $a (1 .. $limit)
+{
+ for my $b (1 .. $limit)
+ {
+ for my $c (1 .. $limit)
+ {
+ my $left = Math::BigFloat->new($a);
+ my $right = Math::BigFloat->new($a);
+
+ my $c_sqrt = Math::BigFloat->new($c)->bsqrt;
+
+ $left->badd(Math::BigFloat->new($b)->bmul($c_sqrt));
+ $right->bsub(Math::BigFloat->new($b)->bmul($c_sqrt));
+
+ say ": Considering $a, $b, $c" if $verbose;
+
+ # say "$a|$b|$c|L:$left (" . cube_root($left) . ")|R:$right(" . cube_root($right) . ")" . " " .cube_root($left)->badd(cube_root($right));
+
+ my $sum = cube_root($left)->badd(cube_root($right));
+ if ($sum->beq(1))
+ {
+ say "($a, $b, $c)";
+ exit if $count-- == 1;
+ }
+ }
+ }
+}
+
+sub cube_root ($number)
+{
+ my $third = Math::BigFloat->new(1)->bdiv(3);
+ return $number->bpow($third) unless $number->is_negative; # include zero.
+ return $number->babs()->bpow($third)->bneg();
+}
diff --git a/challenge-148/arne-sommer/perl/eban-LEN-perl b/challenge-148/arne-sommer/perl/eban-LEN-perl
new file mode 100755
index 0000000000..4a20242eeb
--- /dev/null
+++ b/challenge-148/arne-sommer/perl/eban-LEN-perl
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use Lingua::EN::Numbers qw/num2en/;
+
+my $limit = int($ARGV[0] || 100);
+
+my @numbers;
+
+for my $candidate (1 .. $limit)
+{
+ push(@numbers, $candidate) unless num2en($candidate) =~ /e/;
+}
+
+say join(", ", @numbers);
diff --git a/challenge-148/arne-sommer/perl/eban-MBN-perl b/challenge-148/arne-sommer/perl/eban-MBN-perl
new file mode 100755
index 0000000000..6de4dd09c0
--- /dev/null
+++ b/challenge-148/arne-sommer/perl/eban-MBN-perl
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use Math::BigInt::Named;
+
+my $limit = int($ARGV[0] || 100);
+
+my @numbers;
+
+for my $candidate (1 .. $limit)
+{
+ push(@numbers, $candidate) unless Math::BigInt::Named->new($candidate)->name =~ /e/;
+}
+
+say join(", ", @numbers);
diff --git a/challenge-148/arne-sommer/raku/cardano-triplets-1 b/challenge-148/arne-sommer/raku/cardano-triplets-1
new file mode 100755
index 0000000000..131b16e395
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/cardano-triplets-1
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+use Math::Root;
+
+unit sub MAIN (Int $limit = 5, :v(:$verbose));
+
+my $ct := gather
+{
+ for 1 .. Inf -> $a
+ {
+ for 1 .. Inf -> $b
+ {
+ for 1 .. Inf -> $c
+ {
+ say ": Considering $a, $b, $c" if $verbose;
+ take ($a, $b, $c) if root($a + $b * root($c), 3) + root($a - $b * root($c), 3) == 1;
+ }
+ }
+ }
+}
+
+$ct[^$limit].map({ say "(" ~ @$_.join(", ") ~ ")" if $_ });
diff --git a/challenge-148/arne-sommer/raku/cardano-triplets-2 b/challenge-148/arne-sommer/raku/cardano-triplets-2
new file mode 100755
index 0000000000..cc033792ad
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/cardano-triplets-2
@@ -0,0 +1,32 @@
+#! /usr/bin/env raku
+
+use Math::Root;
+
+unit sub MAIN (:$count = 5, :v(:$verbose));
+
+my $ct := gather
+{
+ for 1 .. Inf -> $a
+ {
+ for 1 .. Inf -> $b
+ {
+ for 1 .. Inf -> $c
+ {
+ my $left = $a + $b * root($c);
+ my $right = $a - $b * root($c);
+
+ say ": Considering $a, $b, $c" if $verbose;
+ take ($a, $b, $c) if cube-root($left) + cube-root($right) == 1;
+ }
+ }
+ }
+}
+
+$ct[^$count].map({ say "(" ~ @$_.join(", ") ~ ")" if $_ });
+
+sub cube-root ($number)
+{
+ return root($number, 3) if $number >= 0;
+
+ return - root(- $number, 3);
+}
diff --git a/challenge-148/arne-sommer/raku/cardano-triplets-3 b/challenge-148/arne-sommer/raku/cardano-triplets-3
new file mode 100755
index 0000000000..d51730bd73
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/cardano-triplets-3
@@ -0,0 +1,32 @@
+#! /usr/bin/env raku
+
+use Math::Root;
+
+unit sub MAIN (Int :$limit = 21, :$count = 5, :v(:$verbose));
+
+my $ct := gather
+{
+ for 1 .. $limit -> $a
+ {
+ for 1 .. $limit -> $b
+ {
+ for 1 .. $limit -> $c
+ {
+ my $left = $a + $b * root($c);
+ my $right = $a - $b * root($c);
+
+ say ": Considering $a, $b, $c" if $verbose;
+ take ($a, $b, $c) if cube-root($left) + cube-root($right) == 1;
+ }
+ }
+ }
+}
+
+$ct[^$count].map({ say "(" ~ @$_.join(", ") ~ ")" if $_ });
+
+sub cube-root ($number)
+{
+ return root($number, 3) if $number >= 0;
+
+ return - root(- $number, 3);
+}
diff --git a/challenge-148/arne-sommer/raku/ch-1.raku b/challenge-148/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..d17ca28290
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+use Lingua::EN::Numbers;
+
+unit sub MAIN (Int $limit = 100);
+
+(1 .. $limit).grep( { ! cardinal($_).contains('e') } ).join(", ").say;
diff --git a/challenge-148/arne-sommer/raku/ch-2.raku b/challenge-148/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..d51730bd73
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,32 @@
+#! /usr/bin/env raku
+
+use Math::Root;
+
+unit sub MAIN (Int :$limit = 21, :$count = 5, :v(:$verbose));
+
+my $ct := gather
+{
+ for 1 .. $limit -> $a
+ {
+ for 1 .. $limit -> $b
+ {
+ for 1 .. $limit -> $c
+ {
+ my $left = $a + $b * root($c);
+ my $right = $a - $b * root($c);
+
+ say ": Considering $a, $b, $c" if $verbose;
+ take ($a, $b, $c) if cube-root($left) + cube-root($right) == 1;
+ }
+ }
+ }
+}
+
+$ct[^$count].map({ say "(" ~ @$_.join(", ") ~ ")" if $_ });
+
+sub cube-root ($number)
+{
+ return root($number, 3) if $number >= 0;
+
+ return - root(- $number, 3);
+}
diff --git a/challenge-148/arne-sommer/raku/eban-LEN b/challenge-148/arne-sommer/raku/eban-LEN
new file mode 100755
index 0000000000..d17ca28290
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/eban-LEN
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+use Lingua::EN::Numbers;
+
+unit sub MAIN (Int $limit = 100);
+
+(1 .. $limit).grep( { ! cardinal($_).contains('e') } ).join(", ").say;
diff --git a/challenge-148/arne-sommer/raku/eban-LN b/challenge-148/arne-sommer/raku/eban-LN
new file mode 100755
index 0000000000..a5cd54d36b
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/eban-LN
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+use Lingua::Number;
+
+unit sub MAIN (Int $limit = 100);
+
+(1 .. $limit).grep( { ! cardinal($_, 'en').contains('e') } ).join(", ").say;
diff --git a/challenge-148/arne-sommer/raku/eban-LNWF b/challenge-148/arne-sommer/raku/eban-LNWF
new file mode 100755
index 0000000000..859112542d
--- /dev/null
+++ b/challenge-148/arne-sommer/raku/eban-LNWF
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+use Lingua::NumericWordForms;
+
+unit sub MAIN (Int $limit = 100);
+
+(1 .. $limit).grep( { ! to-numeric-word-form($_).contains('e') } ).join(", ").say;