aboutsummaryrefslogtreecommitdiff
path: root/challenge-137
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2021-11-07 16:41:12 +0100
committerarnesom <arne@bbop.org>2021-11-07 16:41:12 +0100
commitec6cf4ba725cd8b5fc134ae96297f631246ee812 (patch)
tree2648bfe9048aa519503d78e1e631d96085ec6dd0 /challenge-137
parentf2e277bdb5366c85046ec32f84998662b1c6d768 (diff)
downloadperlweeklychallenge-club-ec6cf4ba725cd8b5fc134ae96297f631246ee812.tar.gz
perlweeklychallenge-club-ec6cf4ba725cd8b5fc134ae96297f631246ee812.tar.bz2
perlweeklychallenge-club-ec6cf4ba725cd8b5fc134ae96297f631246ee812.zip
Arne Sommer
Diffstat (limited to 'challenge-137')
-rw-r--r--challenge-137/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-137/arne-sommer/perl/ch-1.pl18
-rwxr-xr-xchallenge-137/arne-sommer/perl/ch-2.pl29
-rwxr-xr-xchallenge-137/arne-sommer/perl/long-year-perl18
-rwxr-xr-xchallenge-137/arne-sommer/perl/lychrel-number-perl29
-rwxr-xr-xchallenge-137/arne-sommer/raku/ch-1.raku16
-rwxr-xr-xchallenge-137/arne-sommer/raku/ch-2.raku19
-rwxr-xr-xchallenge-137/arne-sommer/raku/long-year12
-rwxr-xr-xchallenge-137/arne-sommer/raku/long-year-oneliner3
-rwxr-xr-xchallenge-137/arne-sommer/raku/long-year-tabulated16
-rwxr-xr-xchallenge-137/arne-sommer/raku/long-year-tabulated216
-rwxr-xr-xchallenge-137/arne-sommer/raku/lychrel-number19
-rwxr-xr-xchallenge-137/arne-sommer/raku/lychrel-number-upto23
-rwxr-xr-xchallenge-137/arne-sommer/raku/lychrel-sequence21
14 files changed, 240 insertions, 0 deletions
diff --git a/challenge-137/arne-sommer/blog.txt b/challenge-137/arne-sommer/blog.txt
new file mode 100644
index 0000000000..12e1ec7e7d
--- /dev/null
+++ b/challenge-137/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/lychrel-longing.html
diff --git a/challenge-137/arne-sommer/perl/ch-1.pl b/challenge-137/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..ea4a654457
--- /dev/null
+++ b/challenge-137/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,18 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use DateTime;
+
+my $lower = 1900;
+my $upper = 2100;
+
+my @long_years;
+
+for my $year ($lower .. $upper)
+{
+ push(@long_years, $year) if DateTime->new(year => $year, month => 12, day => 31)->week_number() == 53;
+}
+
+say join(", ", @long_years);
diff --git a/challenge-137/arne-sommer/perl/ch-2.pl b/challenge-137/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..c6cca05d76
--- /dev/null
+++ b/challenge-137/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+
+no warnings qw(experimental::signatures);
+
+my $n = $ARGV[0] // "";
+
+die "Please specify an integer in the range 10 .. 1000" unless $n =~ /^[1-9]\d*$/;
+die "Please specify an integer in the range 10 .. 1000" if $n < 10 || $n > 1000;
+
+say is_lychrel($n);
+
+sub is_lychrel ($current)
+{
+ my $i = 0;
+
+ while (1)
+ {
+ $current = $current + reverse $current;
+
+ return 0 if $current == reverse $current;
+
+ return 1 if $i++ == 500 || $current >= 10_000_000;
+ }
+}
diff --git a/challenge-137/arne-sommer/perl/long-year-perl b/challenge-137/arne-sommer/perl/long-year-perl
new file mode 100755
index 0000000000..ea4a654457
--- /dev/null
+++ b/challenge-137/arne-sommer/perl/long-year-perl
@@ -0,0 +1,18 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use DateTime;
+
+my $lower = 1900;
+my $upper = 2100;
+
+my @long_years;
+
+for my $year ($lower .. $upper)
+{
+ push(@long_years, $year) if DateTime->new(year => $year, month => 12, day => 31)->week_number() == 53;
+}
+
+say join(", ", @long_years);
diff --git a/challenge-137/arne-sommer/perl/lychrel-number-perl b/challenge-137/arne-sommer/perl/lychrel-number-perl
new file mode 100755
index 0000000000..c6cca05d76
--- /dev/null
+++ b/challenge-137/arne-sommer/perl/lychrel-number-perl
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+use feature 'signatures';
+
+no warnings qw(experimental::signatures);
+
+my $n = $ARGV[0] // "";
+
+die "Please specify an integer in the range 10 .. 1000" unless $n =~ /^[1-9]\d*$/;
+die "Please specify an integer in the range 10 .. 1000" if $n < 10 || $n > 1000;
+
+say is_lychrel($n);
+
+sub is_lychrel ($current)
+{
+ my $i = 0;
+
+ while (1)
+ {
+ $current = $current + reverse $current;
+
+ return 0 if $current == reverse $current;
+
+ return 1 if $i++ == 500 || $current >= 10_000_000;
+ }
+}
diff --git a/challenge-137/arne-sommer/raku/ch-1.raku b/challenge-137/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..e4af766016
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int :$lower = 1900, Int :$upper = 2100, :t(:$tabulated));
+
+my @long-years;
+
+for $lower .. $upper -> $year
+{
+ @long-years.push: $year if Date.new("$year-12-31").week-number == 53;
+}
+
+my $i = 1;
+
+say $tabulated
+ ?? @long-years.map({ ($i++ %% 5) ?? "$_,\n" !! "$_, " }).join.chop(2)
+ !! @long-years.join(", ");
diff --git a/challenge-137/arne-sommer/raku/ch-2.raku b/challenge-137/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..629de6c561
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,19 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where 10 <= $n <= 1000);
+
+say + is-lychrel($n);
+
+sub is-lychrel ($current is copy)
+{
+ my $i = 0;
+
+ loop
+ {
+ $current = $current + $current.flip;
+
+ return False if $current == $current.flip;
+
+ return True if $i++ == 500 || $current >= 10_000_000;
+ }
+}
diff --git a/challenge-137/arne-sommer/raku/long-year b/challenge-137/arne-sommer/raku/long-year
new file mode 100755
index 0000000000..26e98b4040
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/long-year
@@ -0,0 +1,12 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int :$lower = 1900, Int :$upper = 2100);
+
+my @long-years;
+
+for $lower .. $upper -> $year
+{
+ @long-years.push: $year if Date.new("$year-12-31").week-number == 53;
+}
+
+say @long-years.join(", ");
diff --git a/challenge-137/arne-sommer/raku/long-year-oneliner b/challenge-137/arne-sommer/raku/long-year-oneliner
new file mode 100755
index 0000000000..38f8c1de46
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/long-year-oneliner
@@ -0,0 +1,3 @@
+#! /usr/bin/env raku
+
+say (1900 .. 2100).grep({ Date.new("$_-12-31").week-number == 53 }).join(", ");
diff --git a/challenge-137/arne-sommer/raku/long-year-tabulated b/challenge-137/arne-sommer/raku/long-year-tabulated
new file mode 100755
index 0000000000..58906dbeed
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/long-year-tabulated
@@ -0,0 +1,16 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int :$lower = 1900, Int :$upper = 2100, :t(:$tabulated));
+
+my @long-years;
+
+for $lower .. $upper -> $year
+{
+ @long-years.push: $year if Date.new("$year-12-31").week-number == 53;
+}
+
+my $i = 1;
+
+say $tabulated
+ ?? @long-years.map({ ($i++ %% 5) ?? "$_,\n" !! "$_, " }).join
+ !! @long-years.join(", ");
diff --git a/challenge-137/arne-sommer/raku/long-year-tabulated2 b/challenge-137/arne-sommer/raku/long-year-tabulated2
new file mode 100755
index 0000000000..e4af766016
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/long-year-tabulated2
@@ -0,0 +1,16 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int :$lower = 1900, Int :$upper = 2100, :t(:$tabulated));
+
+my @long-years;
+
+for $lower .. $upper -> $year
+{
+ @long-years.push: $year if Date.new("$year-12-31").week-number == 53;
+}
+
+my $i = 1;
+
+say $tabulated
+ ?? @long-years.map({ ($i++ %% 5) ?? "$_,\n" !! "$_, " }).join.chop(2)
+ !! @long-years.join(", ");
diff --git a/challenge-137/arne-sommer/raku/lychrel-number b/challenge-137/arne-sommer/raku/lychrel-number
new file mode 100755
index 0000000000..629de6c561
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/lychrel-number
@@ -0,0 +1,19 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where 10 <= $n <= 1000);
+
+say + is-lychrel($n);
+
+sub is-lychrel ($current is copy)
+{
+ my $i = 0;
+
+ loop
+ {
+ $current = $current + $current.flip;
+
+ return False if $current == $current.flip;
+
+ return True if $i++ == 500 || $current >= 10_000_000;
+ }
+}
diff --git a/challenge-137/arne-sommer/raku/lychrel-number-upto b/challenge-137/arne-sommer/raku/lychrel-number-upto
new file mode 100755
index 0000000000..d278ac245c
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/lychrel-number-upto
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where 10 <= $n <= 1000, :u(:$upto), :v(:$verbose));
+
+$upto
+ ?? (10 .. $n).map({ say "$_ -> { + is-lychrel($_) }" })
+ !! say + is-lychrel($n);
+
+sub is-lychrel ($current is copy)
+{
+ my $i = 0;
+
+ loop
+ {
+ my $flipped = $current.flip;
+ say ": $current + $flipped = { $current + $flipped }" if $verbose;
+ $current = $current + $current.flip;
+
+ return False if $current == $current.flip;
+
+ return True if $i++ == 500 || $current >= 10_000_000;
+ }
+}
diff --git a/challenge-137/arne-sommer/raku/lychrel-sequence b/challenge-137/arne-sommer/raku/lychrel-sequence
new file mode 100755
index 0000000000..73ad35d4d6
--- /dev/null
+++ b/challenge-137/arne-sommer/raku/lychrel-sequence
@@ -0,0 +1,21 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0);
+
+my $lychrel := (10 .. *).grep({ is-lychrel($_) });
+
+say $lychrel[^$n].join(", ");
+
+sub is-lychrel ($current is copy)
+{
+ my $i = 0;
+
+ loop
+ {
+ $current = $current + $current.flip;
+
+ return False if $current == $current.flip;
+
+ return True if $i++ == 500 || $current >= 10_000_000;
+ }
+}