diff options
| -rw-r--r-- | challenge-023/lakpatashi/README | 1 | ||||
| -rwxr-xr-x | challenge-023/lakpatashi/perl/ch-1.pl | 42 | ||||
| -rwxr-xr-x | challenge-023/lakpatashi/perl/ch-2.pl | 49 |
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; +} |
