aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-02-21 19:50:57 +0000
committerGitHub <noreply@github.com>2022-02-21 19:50:57 +0000
commitb685b4272a1987181a7c72b1df15dfe6e128b97e (patch)
treea3e400da5e033b41e777cfc31d3af2b8d8e48b4f
parent0f2fd1fc6925c075aafa455fe6c17243ced7dd5c (diff)
parent1281dc37c7bcc08ec45e7c4cfa0a6b3ce99bbd12 (diff)
downloadperlweeklychallenge-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.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);
+}