diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2022-04-23 23:09:50 -0400 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2022-04-23 23:09:50 -0400 |
| commit | f71d6827f643cba6fd2085d2fe5b522d8b1c042c (patch) | |
| tree | ea1a4d773e1f105325683e23ff9d0f415d4fdd1d | |
| parent | 625cd7e5e395f68a1124667b412fcdb15cbbda22 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-159/jaldhar-h-vyas/perl/ch-1.pl | 15 | ||||
| -rwxr-xr-x | challenge-159/jaldhar-h-vyas/perl/ch-2.pl | 75 | ||||
| -rwxr-xr-x | challenge-159/jaldhar-h-vyas/raku/ch-1.raku | 15 | ||||
| -rwxr-xr-x | challenge-159/jaldhar-h-vyas/raku/ch-2.raku | 35 |
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; + } +} |
