diff options
| author | Flavio Poletti <flavio@polettix.it> | 2022-02-24 08:35:40 +0100 |
|---|---|---|
| committer | Flavio Poletti <flavio@polettix.it> | 2022-02-24 08:35:40 +0100 |
| commit | ca06d1b01f2da4461239aeacc43d2610da628802 (patch) | |
| tree | 2c1fda5112efd85be85ba74582163bf462c3ce1c | |
| parent | e5f746f7287eafbea87a8f545c2266e01c378323 (diff) | |
| download | perlweeklychallenge-club-ca06d1b01f2da4461239aeacc43d2610da628802.tar.gz perlweeklychallenge-club-ca06d1b01f2da4461239aeacc43d2610da628802.tar.bz2 perlweeklychallenge-club-ca06d1b01f2da4461239aeacc43d2610da628802.zip | |
Add polettix's solution to challenge-153
| -rw-r--r-- | challenge-153/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-153/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-153/polettix/perl/ch-1.pl | 22 | ||||
| -rw-r--r-- | challenge-153/polettix/perl/ch-2.pl | 31 | ||||
| -rw-r--r-- | challenge-153/polettix/raku/ch-1.raku | 23 | ||||
| -rw-r--r-- | challenge-153/polettix/raku/ch-2.raku | 8 |
6 files changed, 86 insertions, 0 deletions
diff --git a/challenge-153/polettix/blog.txt b/challenge-153/polettix/blog.txt new file mode 100644 index 0000000000..17c965beba --- /dev/null +++ b/challenge-153/polettix/blog.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2022/02/23/pwc153-left-factorials/ diff --git a/challenge-153/polettix/blog1.txt b/challenge-153/polettix/blog1.txt new file mode 100644 index 0000000000..4c6eecf03d --- /dev/null +++ b/challenge-153/polettix/blog1.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2022/02/24/pwc153-factorions/ diff --git a/challenge-153/polettix/perl/ch-1.pl b/challenge-153/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..33023add4e --- /dev/null +++ b/challenge-153/polettix/perl/ch-1.pl @@ -0,0 +1,22 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; +use Memoize; + +my $min = shift // 1; +my $max = shift // 10; +say join ', ', map { left_factorial($_) } $min .. $max; + +memoize('left_factorial'); +sub left_factorial ($n) { + return $n if $n <= 2; + return factorial($n - 1) + left_factorial($n - 1); +} + +memoize('factorial'); +sub factorial ($n) { + return 1 if $n < 2; + return $n * factorial($n - 1); +} diff --git a/challenge-153/polettix/perl/ch-2.pl b/challenge-153/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..ccb4269116 --- /dev/null +++ b/challenge-153/polettix/perl/ch-2.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; +use List::Util 'sum'; + +say is_factorion(shift // 145) ? 1 : 0; + +sub is_factorion ($n) { + state $f = [ 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880 ]; + $n == sum map { $f->[$_] } split m{}mxs, $n; +} + + +my $s = ''; +while ('necessary') { + $s .= '9'; + last if $s > sumfact($s); +} +my $max = sumfact($s); +say $s, ' ', $max; + +for my $n (0 .. $max) { + say $n if is_factorion($n); +} + +sub sumfact ($n) { + state $f = [ 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880 ]; + sum map { $f->[$_] } split m{}mxs, $n; +} diff --git a/challenge-153/polettix/raku/ch-1.raku b/challenge-153/polettix/raku/ch-1.raku new file mode 100644 index 0000000000..d216784869 --- /dev/null +++ b/challenge-153/polettix/raku/ch-1.raku @@ -0,0 +1,23 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (Int:D $min = 1, Int:D $max = 10) { + ($min .. $max).map({left-factorial($_)}).join(', ').put; + ($min .. $max).map({left-factorial-cached($_)}).join(', ').put; +} + +multi sub left-factorial (Int:D $n where 0 <= * <= 2) { $n } +multi sub left-factorial (Int:D $n where * > 2) { + my $f = 1; + 1 + (1 ..^ $n).map({$f *= $^x}).sum; +} + +sub left-factorial-cached (Int:D $n where * >= 0) { + state $factorial = 1; + state $k = 1; + state @left-factorials = 0, 1, 2; + while $n > @left-factorials.end { + $factorial *= ++$k; + @left-factorials.push: @left-factorials[*-1] + $factorial; + } + return @left-factorials[$n]; +} diff --git a/challenge-153/polettix/raku/ch-2.raku b/challenge-153/polettix/raku/ch-2.raku new file mode 100644 index 0000000000..79791344b6 --- /dev/null +++ b/challenge-153/polettix/raku/ch-2.raku @@ -0,0 +1,8 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (Int:D $n = 145) { put is-factorion($n) ?? 1 !! 0 } + +sub is-factorion (Int:D $n where $n >= 0) { + state %factorions = set(1, 2, 145, 40585); + return $n ∈ %factorions; +} |
