aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-16 19:05:22 +0100
committerGitHub <noreply@github.com>2021-05-16 19:05:22 +0100
commit616f20ade5282eb41f72f7abe1bd90dd40801f46 (patch)
treed201cfafa772ef67bda48f4ffa84a558eb37df1f
parent9efdc231a367b878338e0bc081ead7d1effc01e8 (diff)
parent509a8a1e6ba1bdfdce8abac98d162f85ddc6766b (diff)
downloadperlweeklychallenge-club-616f20ade5282eb41f72f7abe1bd90dd40801f46.tar.gz
perlweeklychallenge-club-616f20ade5282eb41f72f7abe1bd90dd40801f46.tar.bz2
perlweeklychallenge-club-616f20ade5282eb41f72f7abe1bd90dd40801f46.zip
Merge pull request #4086 from lakpatashi/challenge-023
Finished challenge-023 with perl
-rw-r--r--challenge-023/lakpatashi/README1
-rwxr-xr-xchallenge-023/lakpatashi/perl/ch-1.pl42
-rwxr-xr-xchallenge-023/lakpatashi/perl/ch-2.pl49
3 files changed, 92 insertions, 0 deletions
diff --git a/challenge-023/lakpatashi/README b/challenge-023/lakpatashi/README
new file mode 100644
index 0000000000..bc153bd576
--- /dev/null
+++ b/challenge-023/lakpatashi/README
@@ -0,0 +1 @@
+Solution by lakpatashi
diff --git a/challenge-023/lakpatashi/perl/ch-1.pl b/challenge-023/lakpatashi/perl/ch-1.pl
new file mode 100755
index 0000000000..7bc81fef20
--- /dev/null
+++ b/challenge-023/lakpatashi/perl/ch-1.pl
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use Data::Dumper;
+use List::Util qw(max min sum);
+use feature qw(switch);
+use Memoize;
+memoize qw (factorial );
+
+#part 1
+# commandline arg ==> order, arr
+my ($order,@arr) = @ARGV;
+if($#ARGV < 0){ #default values when @ARGV is absent
+ @arr = (5, 9, 2, 8, 1, 6);
+ $order = 1;
+}
+print "arr :: @arr\n";
+print "order :: $order\n";
+print "diff :: ";
+for my $i (0..$#arr-$order){
+ print nthDiff( reverse @arr[$i..$i+$order] )," ";
+}
+print "\n";
+
+sub nthDiff{
+ #arr
+ my @arr = @_;
+ @arr = map { (-1)**($_) * binomial($#arr,$_) * $arr[$_]} 0..$#arr;
+ return sum @arr;
+}
+
+sub binomial{
+ my ($n,$r) = @_;
+ return int factorial($n) / ( factorial($r) * factorial($n-$r));
+}
+
+sub factorial{
+ my ($n) = @_;
+ return 1 if $n<1;
+ return $n*factorial($n-1);
+}
diff --git a/challenge-023/lakpatashi/perl/ch-2.pl b/challenge-023/lakpatashi/perl/ch-2.pl
new file mode 100755
index 0000000000..97ac7598fc
--- /dev/null
+++ b/challenge-023/lakpatashi/perl/ch-2.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+use POSIX;
+use strict;
+use warnings;
+use List::Util qw( min max sum);
+
+
+my $m = 1000000; # max value for prime list
+my @primes = buildPrimes($m);
+my $n = 228;
+for my $i (@primes){
+ last if $n==1;
+ if($i <= sqrt($n)){
+ while(not $n % $i ){
+ print "$i ";
+ $n /= $i;
+ }
+ }else{
+ print "$n ";
+ last;
+ }
+
+}
+
+
+sub buildPrimes{ # building prime list
+ my $m=shift;
+ my @prime = (1)x($m+1);
+ @prime[0,1]=(0)x2;
+ for (my $p=2; $p*$p <= $m; $p++){
+ if($prime[$p]==1){
+ for(my $i= $p*$p; $i<= $m; $i+=$p){
+ $prime[$i]=0;
+ }
+ }
+ }
+ @prime = grep{ $prime[$_] } 2..$m;
+ return @prime;
+}
+
+sub isPrime{ # check primality, not is use
+ my $n = shift;
+ my $nSq = sqrt $n;
+ for my $i (@primes){
+ last if $i>$nSq;
+ return 0 unless $n % $i;
+ }
+ return 1;
+}