From 502c7a2dcf607316a4706cb0fffa1e33d5325369 Mon Sep 17 00:00:00 2001 From: "Jaldhar H. Vyas" Date: Sun, 19 Jun 2022 16:51:48 -0400 Subject: Challenge 169 by Jaldhar H. Vyas. --- challenge-169/jaldhar-h-vyas/blog.txt | 1 + challenge-169/jaldhar-h-vyas/perl/ch-1.pl | 39 +++++++++++++++++ challenge-169/jaldhar-h-vyas/perl/ch-2.pl | 68 +++++++++++++++++++++++++++++ challenge-169/jaldhar-h-vyas/raku/ch-1.raku | 40 +++++++++++++++++ challenge-169/jaldhar-h-vyas/raku/ch-2.raku | 47 ++++++++++++++++++++ 5 files changed, 195 insertions(+) create mode 100644 challenge-169/jaldhar-h-vyas/blog.txt create mode 100755 challenge-169/jaldhar-h-vyas/perl/ch-1.pl create mode 100755 challenge-169/jaldhar-h-vyas/perl/ch-2.pl create mode 100755 challenge-169/jaldhar-h-vyas/raku/ch-1.raku create mode 100755 challenge-169/jaldhar-h-vyas/raku/ch-2.raku diff --git a/challenge-169/jaldhar-h-vyas/blog.txt b/challenge-169/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..57dfcf13e6 --- /dev/null +++ b/challenge-169/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2022/06/perl_weekly_challenge_week_169.html \ No newline at end of file diff --git a/challenge-169/jaldhar-h-vyas/perl/ch-1.pl b/challenge-169/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..746fd56a19 --- /dev/null +++ b/challenge-169/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl +use 5.030; +use warnings; + +sub factorize { + my ($n) = @_; + my @primeFactors; + + while ($n % 2 == 0) { + push @primeFactors, 2; + $n /= 2; + } + + for (my $i = 3; $i <= sqrt $n; $i += 2) { + while ($n % $i == 0) { + push @primeFactors, $i; + $n /= $i; + } + } + + if ($n > 2) { + push @primeFactors, $n; + } + + return @primeFactors; +} + +my $n = 2; +my @brilliants; + +until (scalar @brilliants == 20) { + my @factors = factorize($n); + if (scalar @factors == 2 && length $factors[0] == length $factors[1]) { + push @brilliants, $n; + } + $n++; +} + +say join q{, }, @brilliants; diff --git a/challenge-169/jaldhar-h-vyas/perl/ch-2.pl b/challenge-169/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..74c774defe --- /dev/null +++ b/challenge-169/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl +use 5.030; +use warnings; +use Math::Round qw/ nearest /; + +sub factorize { + my ($n) = @_; + my @primeFactors; + + while ($n % 2 == 0) { + push @primeFactors, 2; + $n /= 2; + } + + for (my $i = 3; $i <= sqrt $n; $i += 2) { + while ($n % $i == 0) { + push @primeFactors, $i; + $n /= $i; + } + } + + if ($n > 2) { + push @primeFactors, $n; + } + + return @primeFactors; +} + +sub isPerfect { + my ($n) = @_; + + for my $i (map { nearest(0.001, log($n) / log($_ )) } 2 .. sqrt($n)) { + if ($i == int $i) { + return 1; + } + } + + return undef; +} + +sub isPowerful { + my ($n) = @_; + my %primeFactors; + + for my $factor (factorize($n)) { + $primeFactors{$factor}++; + } + + for my $factor (keys %primeFactors) { + if ($n % ($factor ** 2) != 0) { + return undef; + } + } + + return 1; +} + +my $n = 2; +my @achilles; + +until (scalar @achilles == 20) { + if (isPowerful($n) && !isPerfect($n)) { + push @achilles, $n; + } + $n++; +} + +say join q{, }, @achilles; diff --git a/challenge-169/jaldhar-h-vyas/raku/ch-1.raku b/challenge-169/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..b16cc2d6eb --- /dev/null +++ b/challenge-169/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,40 @@ +#!/usr/bin/raku + +sub factorize(Int $N) { + my $n = $N; + my @primeFactors; + + while $n %% 2 { + @primeFactors.push(2); + $n /= 2; + } + + loop (my $i = 3; $i <= $n.sqrt; $i += 2) { + while ($n %% $i) { + @primeFactors.push($i); + $n /= $i; + } + } + + if $n > 2 { + @primeFactors.push($n); + } + + return @primeFactors; +} + +sub MAIN( +) { + my $n = 2; + my @brilliants; + + until @brilliants.elems == 20 { + my @factors = factorize($n); + if @factors.elems == 2 && @factors[0].chars == @factors[1].chars { + @brilliants.push($n); + } + $n++; + } + + @brilliants.join(q{, }).say; +} diff --git a/challenge-169/jaldhar-h-vyas/raku/ch-2.raku b/challenge-169/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..bf7ee658dc --- /dev/null +++ b/challenge-169/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,47 @@ +#!/usr/bin/raku + +sub factorize(Int $N) { + my $n = $N; + my @primeFactors; + + while $n %% 2 { + @primeFactors.push(2); + $n /= 2;; + } + + loop (my $i = 3; $i <= $n.sqrt; $i += 2) { + while ($n %% $i) { + @primeFactors.push($i); + $n /= $i; + } + } + + if $n > 2 { + @primeFactors.push($n); + } + + return @primeFactors; +} + +sub isPerfect(Int $n) { + return so (2 .. $n.sqrt).map({ $n.log($_).round(0.001); }).any %% 1; +} + +sub isPowerful(Int $n) { + return so $n %% factorize($n).unique.map({ $_ ** 2; }).all; +} + +sub MAIN( +) { + my $n = 2; + my @achilles; + + until @achilles.elems == 20 { + if isPowerful($n) && !isPerfect($n) { + @achilles.push($n); + } + $n++; + } + + @achilles.join(q{, }).say; +} -- cgit