diff options
| author | arnesom <arne@bbop.org> | 2021-11-07 16:41:12 +0100 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2021-11-07 16:41:12 +0100 |
| commit | ec6cf4ba725cd8b5fc134ae96297f631246ee812 (patch) | |
| tree | 2648bfe9048aa519503d78e1e631d96085ec6dd0 /challenge-137 | |
| parent | f2e277bdb5366c85046ec32f84998662b1c6d768 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/perl/ch-1.pl | 18 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/perl/ch-2.pl | 29 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/perl/long-year-perl | 18 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/perl/lychrel-number-perl | 29 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/ch-1.raku | 16 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/ch-2.raku | 19 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/long-year | 12 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/long-year-oneliner | 3 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/long-year-tabulated | 16 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/long-year-tabulated2 | 16 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/lychrel-number | 19 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/lychrel-number-upto | 23 | ||||
| -rwxr-xr-x | challenge-137/arne-sommer/raku/lychrel-sequence | 21 |
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; + } +} |
