diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-08-26 20:37:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-26 20:37:41 +0100 |
| commit | a4127b8c7f4d8c468b504a405fb14acb3598233e (patch) | |
| tree | b9f39899f22edfd12a1a92d2c4b258d341f720dd | |
| parent | e6c6c4f745a730009bb3428058dc5a51b48f6f7f (diff) | |
| parent | 905694386cac675b828abe9ad01bd28066a01cfe (diff) | |
| download | perlweeklychallenge-club-a4127b8c7f4d8c468b504a405fb14acb3598233e.tar.gz perlweeklychallenge-club-a4127b8c7f4d8c468b504a405fb14acb3598233e.tar.bz2 perlweeklychallenge-club-a4127b8c7f4d8c468b504a405fb14acb3598233e.zip | |
Merge pull request #560 from andrezgz/challenge-023
challenge-023 andrezgz solution
| -rw-r--r-- | challenge-023/andrezgz/perl5/ch-1.pl | 27 | ||||
| -rw-r--r-- | challenge-023/andrezgz/perl5/ch-2.pl | 36 |
2 files changed, 63 insertions, 0 deletions
diff --git a/challenge-023/andrezgz/perl5/ch-1.pl b/challenge-023/andrezgz/perl5/ch-1.pl new file mode 100644 index 0000000000..2ae7ebd686 --- /dev/null +++ b/challenge-023/andrezgz/perl5/ch-1.pl @@ -0,0 +1,27 @@ +#!/usr/bin/perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-023/ +# Task #1 +# Create a script that prints nth order forward difference series. +# You should be a able to pass the list of numbers and order number as command line parameters. +# Let me show you with an example. +# Suppose we have list (X) of numbers: 5, 9, 2, 8, 1, 6 and we would like to create 1st order forward difference series (Y). +# So using the formula Y(i) = X(i+1) - X(i), we get the following numbers: (9-5), (2-9), (8-2), (1-8), (6-1). +# In short, the final series would be: 4, -7, 6, -7, 5. If you noticed, it has one less number than the original series. +# Similary you can carry on 2nd order forward difference series like: (-7-4), (6+7), (-7-6), (5+7) => -11, 13, -13, 12. + +use strict; +use warnings; + +die "Usage: $0 <comma-separated number list> [<order number>]" if @ARGV != 2; + +my @list = split /,/,shift; +die 'List should have at leat 2 numbers' if @list < 2; + +my $order = shift || 1; +die 'Max order is '.$#list if $order > $#list; + +for (1 .. $order) { + @list = map {$list[$_] - $list[$_-1]} (1 .. $#list); + print join(',', @list).$/; +} diff --git a/challenge-023/andrezgz/perl5/ch-2.pl b/challenge-023/andrezgz/perl5/ch-2.pl new file mode 100644 index 0000000000..6a89eee9b4 --- /dev/null +++ b/challenge-023/andrezgz/perl5/ch-2.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-023/ +# Task #2 +# Create a script that prints Prime Decomposition of a given number. +# The prime decomposition of a number is defined as a list of prime numbers which when all multiplied together, +# are equal to that number. For example, the Prime decomposition of 228 is 2,2,3,19 as 228 = 2 * 2 * 3 * 19. + +use strict; +use warnings; + +die "Usage: $0 <number>" if @ARGV == 0; +my $number = shift; + +my @prime_decomp; + +foreach my $prime (prime_factors($number)){ + do { + $number /= $prime; + push @prime_decomp, $prime; + } until ($number % $prime != 0); +} + +print join ',', @prime_decomp; + +sub prime_factors { + my $n = shift; + my @r = grep {$n % $_ == 0 && is_prime($_)} (2 .. $n/2); #get prime divisors + return @r ? @r : ($n); # number is prime if no prime divisors were found +} + +sub is_prime { + my $n = shift; + #every composite number has a prime factor less than or equal to its square root. + return 1 == grep {$n % $_ == 0} (1 .. sqrt $n); +} |
