aboutsummaryrefslogtreecommitdiff
path: root/challenge-023
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2019-09-01 15:41:12 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2019-09-01 15:41:12 -0400
commit9cdf79169dec45c2d07df9e4e6aee6c6ca0d848e (patch)
treeb5fbf601c9c4174efecf8c2860310e43d1267f96 /challenge-023
parente200d09264f1c7218af9e22b007efd77da3e834e (diff)
downloadperlweeklychallenge-club-9cdf79169dec45c2d07df9e4e6aee6c6ca0d848e.tar.gz
perlweeklychallenge-club-9cdf79169dec45c2d07df9e4e6aee6c6ca0d848e.tar.bz2
perlweeklychallenge-club-9cdf79169dec45c2d07df9e4e6aee6c6ca0d848e.zip
Challenge 23 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-023')
-rw-r--r--challenge-023/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-023/jaldhar-h-vyas/perl5/ch-1.pl17
-rwxr-xr-xchallenge-023/jaldhar-h-vyas/perl5/ch-2.pl69
-rwxr-xr-xchallenge-023/jaldhar-h-vyas/perl6/ch-1.p610
-rwxr-xr-xchallenge-023/jaldhar-h-vyas/perl6/ch-2.p632
5 files changed, 129 insertions, 0 deletions
diff --git a/challenge-023/jaldhar-h-vyas/blog.txt b/challenge-023/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..3d1f8b54dc
--- /dev/null
+++ b/challenge-023/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2019/09/perl_weekly_challenge_week_23.html
diff --git a/challenge-023/jaldhar-h-vyas/perl5/ch-1.pl b/challenge-023/jaldhar-h-vyas/perl5/ch-1.pl
new file mode 100755
index 0000000000..00a5e6eb37
--- /dev/null
+++ b/challenge-023/jaldhar-h-vyas/perl5/ch-1.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use 5.010;
+use Getopt::Std;
+
+my %opts;
+getopt('n:', \%opts);
+
+$opts{'n'} //= 1;
+
+my @series = @ARGV;
+for (0 .. $opts{'n'} - 1) {
+ @series = map { $series[$_] - $series[$_ - 1] } (1 .. $#series);
+}
+
+say join q{, }, @series; \ No newline at end of file
diff --git a/challenge-023/jaldhar-h-vyas/perl5/ch-2.pl b/challenge-023/jaldhar-h-vyas/perl5/ch-2.pl
new file mode 100755
index 0000000000..7eb1d7f57a
--- /dev/null
+++ b/challenge-023/jaldhar-h-vyas/perl5/ch-2.pl
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use 5.010;
+
+sub isPrime {
+ my ($n) = @_;
+
+ if ($n < 2) {
+ return undef;
+ }
+
+ if ($n == 2) {
+ return 1;
+ }
+
+ for my $i (2 .. sqrt($n)) {
+ if ($n % $i == 0) {
+ return undef;
+ }
+ }
+
+ return 1;
+}
+
+sub nextPrime {
+ state $i = 1;
+ if (scalar @_) {
+ $i = shift;
+ }
+
+ while ($i++) {
+ if (isPrime($i)) {
+ return $i;
+ }
+ }
+}
+
+sub factorize {
+ my ($n, $primeFactors) = @_;
+ if ($n < 2) {
+ return;
+ }
+
+ my $p = nextPrime(1);
+ while ($p <= $n) {
+
+ if ($n % $p == 0) {
+ push @{$primeFactors}, $p;
+ factorize($n / $p, $primeFactors);
+ }
+ $p = nextPrime();
+ }
+}
+
+my $n = shift;
+
+if ($n < 4) {
+ die "Number must be greater than 3.\n";
+}
+
+my @primeFactors;
+if (isPrime($n)) {
+ push @primeFactors, $n;
+} else {
+ factorize($n, \@primeFactors);
+}
+
+say join q{, }, @primeFactors;
diff --git a/challenge-023/jaldhar-h-vyas/perl6/ch-1.p6 b/challenge-023/jaldhar-h-vyas/perl6/ch-1.p6
new file mode 100755
index 0000000000..54a4a88afb
--- /dev/null
+++ b/challenge-023/jaldhar-h-vyas/perl6/ch-1.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/perl6
+
+multi sub MAIN(Int :$n = 1, *@series) {
+
+ for 0 ..^ $n {
+ @series = (1 ..^ @series.elems).map({ @series[$_] - @series[$_ - 1] });
+ }
+
+ @series.join(q{, }).say;
+}
diff --git a/challenge-023/jaldhar-h-vyas/perl6/ch-2.p6 b/challenge-023/jaldhar-h-vyas/perl6/ch-2.p6
new file mode 100755
index 0000000000..c2052f2eff
--- /dev/null
+++ b/challenge-023/jaldhar-h-vyas/perl6/ch-2.p6
@@ -0,0 +1,32 @@
+#!/usr/bin/perl6
+
+sub factorize(Int $n, @primeFactors) {
+ if $n < 2 {
+ return;
+ }
+
+ my $i = 0;
+ my @primes = (1 .. ∞).grep({ .is-prime });
+ my $p = @primes[$i];
+
+ while $p <= $n {
+
+ if $n %% $p {
+ @primeFactors.push($p);
+ factorize($n div $p, @primeFactors);
+ return;
+ }
+ $p = @primes[$i++];
+ }
+}
+
+multi sub MAIN(Int $n where { $_ > 3}) {
+ my @primeFactors;
+ if $n.is-prime {
+ @primeFactors.push($n);
+ } else {
+ factorize($n, @primeFactors);
+ }
+
+ @primeFactors.join(q{, }).say;
+}