aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-137/polettix/blog.txt1
-rw-r--r--challenge-137/polettix/blog1.txt1
-rw-r--r--challenge-137/polettix/perl/ch-1.pl18
-rw-r--r--challenge-137/polettix/perl/ch-2.pl16
-rw-r--r--challenge-137/polettix/raku/ch-1.raku15
-rw-r--r--challenge-137/polettix/raku/ch-2.raku13
6 files changed, 64 insertions, 0 deletions
diff --git a/challenge-137/polettix/blog.txt b/challenge-137/polettix/blog.txt
new file mode 100644
index 0000000000..c257c6d02b
--- /dev/null
+++ b/challenge-137/polettix/blog.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2021/11/03/pwc137-long-year/
diff --git a/challenge-137/polettix/blog1.txt b/challenge-137/polettix/blog1.txt
new file mode 100644
index 0000000000..7d8f2ccb0a
--- /dev/null
+++ b/challenge-137/polettix/blog1.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2021/11/04/pwc137-lychrel-number/
diff --git a/challenge-137/polettix/perl/ch-1.pl b/challenge-137/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..30f78bec0b
--- /dev/null
+++ b/challenge-137/polettix/perl/ch-1.pl
@@ -0,0 +1,18 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+use Time::Local 'timegm';
+
+sub dow ($y, $m, $d) { (gmtime(timegm(1, 1, 1, $d, --$m, $y)))[6] }
+sub is_long_year ($y) {
+ my $dow = dow($y, 1, 1);
+ return $dow == 4 || $dow == 3 && dow($y, 12, 31) == 4;
+} ## end sub is_long_year ($y)
+
+my @longs = grep { is_long_year($_) } (1900 .. 2100);
+while (@longs > 0) {
+ my @slice = splice @longs, 0, 5;
+ say join ', ', @slice, (@slice == 5 ? '' : ());
+}
diff --git a/challenge-137/polettix/perl/ch-2.pl b/challenge-137/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..d987ef8d91
--- /dev/null
+++ b/challenge-137/polettix/perl/ch-2.pl
@@ -0,0 +1,16 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+sub maybe_lychrel ($n) {
+ while ($n < 10_000_000) {
+ my $r = reverse $n;
+ return 0 if $n eq $r;
+ $n += $r;
+ }
+ return 1;
+}
+
+say maybe_lychrel(shift || 196);
diff --git a/challenge-137/polettix/raku/ch-1.raku b/challenge-137/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..b89593d70d
--- /dev/null
+++ b/challenge-137/polettix/raku/ch-1.raku
@@ -0,0 +1,15 @@
+#!/usr/bin/env raku
+use v6;
+
+subset FullyGregorianYear of Int where * > 1582;
+sub is-long-year (FullyGregorianYear:D $y) {
+ my $dow = Date.new($y, 1, 1).day-of-week;
+ return $dow == 4 || $dow == 3 && Date.new($y, 12, 31).day-of-week == 4;
+}
+
+my @longs = (1900 .. 2100).grep({is-long-year($_)});
+while @longs > 0 {
+ my @slice = @longs.splice(0, 5);
+ @slice.push: '' if @slice == 5;
+ @slice.join(', ').put;
+}
diff --git a/challenge-137/polettix/raku/ch-2.raku b/challenge-137/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..3eedb840bd
--- /dev/null
+++ b/challenge-137/polettix/raku/ch-2.raku
@@ -0,0 +1,13 @@
+#!/usr/bin/env raku
+use v6;
+
+sub MAIN (Int:D $x where 10 <= * <= 1000 = 196) { maybe-lychrel($x).put }
+
+sub maybe-lychrel (Int:D $n is copy where * > 0) {
+ while $n < 10000000 {
+ my $r = $n.flip;
+ return 0 if $n eq $r;
+ $n += $r;
+ }
+ return 1;
+}