aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2022-04-23 23:09:50 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2022-04-23 23:09:50 -0400
commitf71d6827f643cba6fd2085d2fe5b522d8b1c042c (patch)
treeea1a4d773e1f105325683e23ff9d0f415d4fdd1d
parent625cd7e5e395f68a1124667b412fcdb15cbbda22 (diff)
downloadperlweeklychallenge-club-f71d6827f643cba6fd2085d2fe5b522d8b1c042c.tar.gz
perlweeklychallenge-club-f71d6827f643cba6fd2085d2fe5b522d8b1c042c.tar.bz2
perlweeklychallenge-club-f71d6827f643cba6fd2085d2fe5b522d8b1c042c.zip
Challenge 159 by Jaldhar H. Vyas
-rw-r--r--challenge-159/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-159/jaldhar-h-vyas/perl/ch-1.pl15
-rwxr-xr-xchallenge-159/jaldhar-h-vyas/perl/ch-2.pl75
-rwxr-xr-xchallenge-159/jaldhar-h-vyas/raku/ch-1.raku15
-rwxr-xr-xchallenge-159/jaldhar-h-vyas/raku/ch-2.raku35
5 files changed, 141 insertions, 0 deletions
diff --git a/challenge-159/jaldhar-h-vyas/blog.txt b/challenge-159/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..f38bbcc85c
--- /dev/null
+++ b/challenge-159/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2022/04/perl_weekly_challenge_week_159.html \ No newline at end of file
diff --git a/challenge-159/jaldhar-h-vyas/perl/ch-1.pl b/challenge-159/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..83ccfedf89
--- /dev/null
+++ b/challenge-159/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+use POSIX qw/ floor /;
+
+my $n = shift // die "Need a positive integer.\n";
+my ($a, $b, $c, $d) = (0, 1, 1, $n);
+
+print "$a/$b ";
+while ($c <= $n) {
+ my $k = floor(($n + $b) / $d);
+ ($a, $b, $c, $d) = ($c, $d, $k * $c - $a, $k * $d - $b);
+ print "$a/$b ";
+}
+print "\n";
diff --git a/challenge-159/jaldhar-h-vyas/perl/ch-2.pl b/challenge-159/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..69edab6d36
--- /dev/null
+++ b/challenge-159/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,75 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+
+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();
+ }
+}
+
+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 squared {
+ my ($factors) = @_;
+ my %count;
+ for my $factor (@{$factors}) {
+ $count{$factor}++;
+ }
+
+ return (scalar grep { $count{$_} > 1} keys %count) > 0;
+}
+
+my $n = shift // die "Need a positive integer.\n";
+
+my @factors;
+
+factorize($n, \@factors);
+
+if (squared(\@factors)) {
+ say 0;
+} else {
+ say 0 + (scalar @factors % 2) ? -1 : 1;
+}
diff --git a/challenge-159/jaldhar-h-vyas/raku/ch-1.raku b/challenge-159/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..73c87074b8
--- /dev/null
+++ b/challenge-159/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,15 @@
+#!/usr/bin/raku
+
+sub MAIN(
+ Int $n #= a positive integer
+) {
+ my ($a, $b, $c, $d) = (0, 1, 1, $n);
+
+ print "$a/$b ";
+ while $c <= $n {
+ my $k = ($n + $b) div $d;
+ ($a, $b, $c, $d) = ($c, $d, $k * $c - $a, $k * $d - $b);
+ print "$a/$b ";
+ }
+ print "\n";
+}
diff --git a/challenge-159/jaldhar-h-vyas/raku/ch-2.raku b/challenge-159/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..4473667e0a
--- /dev/null
+++ b/challenge-159/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,35 @@
+#!/usr/bin/raku
+
+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++];
+ }
+}
+
+sub MAIN (
+ Int $n #= a positive integer
+) {
+ my @factors;
+
+ factorize($n, @factors);
+
+ if (@factors.categorize({ $_ })).values.any > 1 {
+ say 0;
+ } else {
+ say (@factors.elems % 2) ?? -1 !! 1;
+ }
+}