aboutsummaryrefslogtreecommitdiff
path: root/challenge-150
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-02-06 18:37:55 +0000
committerGitHub <noreply@github.com>2022-02-06 18:37:55 +0000
commit80833add13dcaeca8411cbf0fa3868b52e739132 (patch)
tree0f61b731802b5c85e7531a069287e7e41b1d6dee /challenge-150
parent289b0c07c28cd602e3bab4eea7b1085bc1e14a7f (diff)
parent51595566387cccaf71b2bae03390cabca8950e83 (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-150/arne-sommer/perl/ch-1.pl33
-rwxr-xr-xchallenge-150/arne-sommer/perl/ch-2.pl37
-rwxr-xr-xchallenge-150/arne-sommer/perl/fibonacci-words-perl33
-rwxr-xr-xchallenge-150/arne-sommer/perl/square-free-integers-perl37
-rwxr-xr-xchallenge-150/arne-sommer/raku/ch-1.raku14
-rwxr-xr-xchallenge-150/arne-sommer/raku/ch-2.raku24
-rwxr-xr-xchallenge-150/arne-sommer/raku/fibonacci-words20
-rwxr-xr-xchallenge-150/arne-sommer/raku/fibonacci-words-while14
-rwxr-xr-xchallenge-150/arne-sommer/raku/square-free-integers24
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;
+}