aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Mochan <mochan@fis.unam.mx>2022-02-21 12:16:33 -0600
committerLuis Mochan <mochan@fis.unam.mx>2022-02-21 12:16:33 -0600
commit1281dc37c7bcc08ec45e7c4cfa0a6b3ce99bbd12 (patch)
tree9cf4adfc574c15494afbf6d4ea1c0f76f7e52244
parente1575d77a4181187d7a30e2ac0df6679f4e2bd43 (diff)
downloadperlweeklychallenge-club-1281dc37c7bcc08ec45e7c4cfa0a6b3ce99bbd12.tar.gz
perlweeklychallenge-club-1281dc37c7bcc08ec45e7c4cfa0a6b3ce99bbd12.tar.bz2
perlweeklychallenge-club-1281dc37c7bcc08ec45e7c4cfa0a6b3ce99bbd12.zip
Solve PWC153
-rw-r--r--challenge-153/wlmb/blog.txt1
-rwxr-xr-xchallenge-153/wlmb/perl/ch-1.pl27
-rwxr-xr-xchallenge-153/wlmb/perl/ch-2.pl26
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);
+}