diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-02-21 19:50:57 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-21 19:50:57 +0000 |
| commit | b685b4272a1987181a7c72b1df15dfe6e128b97e (patch) | |
| tree | a3e400da5e033b41e777cfc31d3af2b8d8e48b4f | |
| parent | 0f2fd1fc6925c075aafa455fe6c17243ced7dd5c (diff) | |
| parent | 1281dc37c7bcc08ec45e7c4cfa0a6b3ce99bbd12 (diff) | |
| download | perlweeklychallenge-club-b685b4272a1987181a7c72b1df15dfe6e128b97e.tar.gz perlweeklychallenge-club-b685b4272a1987181a7c72b1df15dfe6e128b97e.tar.bz2 perlweeklychallenge-club-b685b4272a1987181a7c72b1df15dfe6e128b97e.zip | |
Merge pull request #5694 from wlmb/challenges
Solve PWC153
| -rw-r--r-- | challenge-153/wlmb/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-153/wlmb/perl/ch-1.pl | 27 | ||||
| -rwxr-xr-x | challenge-153/wlmb/perl/ch-2.pl | 26 |
3 files changed, 54 insertions, 0 deletions
diff --git a/challenge-153/wlmb/blog.txt b/challenge-153/wlmb/blog.txt new file mode 100644 index 0000000000..fb64d00613 --- /dev/null +++ b/challenge-153/wlmb/blog.txt @@ -0,0 +1 @@ +https://wlmb.github.io/2022/02/21/PWC153/ diff --git a/challenge-153/wlmb/perl/ch-1.pl b/challenge-153/wlmb/perl/ch-1.pl new file mode 100755 index 0000000000..1ad188fbed --- /dev/null +++ b/challenge-153/wlmb/perl/ch-1.pl @@ -0,0 +1,27 @@ +#!/usr/bin/env perl +# Perl weekly challenge 153 +# Task 1: Left factorials +# +# See https://wlmb.github.io/2022/02/21/PWC153/#task-1-left-factorials +use v5.12; +use warnings; +use Memoize; +use bigint; +use Text::Wrap qw(wrap $columns $break); + +memoize qw(left_factorial factorial); +die "Usage: ./ch-1.pl N\nto get the first N left factorials" unless @ARGV; +my $N=shift; +$columns=62; $break=qr/\s/; +say wrap("", " ", "The first $N left factorials are: ", + join ", ", map {left_factorial($_)} (0..$N-1)); +sub left_factorial{ + my $n=shift; + return factorial(0) if $n<=0; + return factorial($n)+left_factorial($n-1); +} +sub factorial{ + my $k=shift; + return 1 if $k<=0; + return $k*factorial($k-1); +} diff --git a/challenge-153/wlmb/perl/ch-2.pl b/challenge-153/wlmb/perl/ch-2.pl new file mode 100755 index 0000000000..3112cd7a7c --- /dev/null +++ b/challenge-153/wlmb/perl/ch-2.pl @@ -0,0 +1,26 @@ +#!/usr/bin/env perl +# Perl weekly challenge 153 +# Task 2: Factorions +# +# See https://wlmb.github.io/2022/02/21/PWC153/#task-2-factorions +use v5.12; +use warnings; +use Memoize; +use List::Util qw(sum0); +memoize qw(factorial); +die "Usage: ./ch-2.pl N1 N2...\nto test if Ni is factorion" unless @ARGV; +foreach(@ARGV){ + say("Expected a non-negative integer: $_"), next unless $_>=0; + my @digits=split ''; + my @factorials=map {factorial($_)} @digits; + my $sum=sum0(@factorials); + my $factorion=$sum==$_; + say "$_ is", $factorion?"":" not", " factorion as ", + join("! + ", @digits), "! = ", join(" + ",@factorials), + " = $sum ", $factorion?"== ":"!= ", $_; +} +sub factorial { + my $n=shift; + return 1 if $n<=0; + return $n*factorial($n-1); +} |
