aboutsummaryrefslogtreecommitdiff
path: root/challenge-133
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2021-10-10 23:19:58 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2021-10-10 23:19:58 -0400
commit01b2c858c49b3521b97f18215bc93de4004df899 (patch)
tree707c0ccd807208ee185fd5c4e9b01f24dd62e947 /challenge-133
parent0cbc830f7a2365933cb31b4bb5f98cf4927a63bc (diff)
downloadperlweeklychallenge-club-01b2c858c49b3521b97f18215bc93de4004df899.tar.gz
perlweeklychallenge-club-01b2c858c49b3521b97f18215bc93de4004df899.tar.bz2
perlweeklychallenge-club-01b2c858c49b3521b97f18215bc93de4004df899.zip
Challenge 133 by Jaldhar H. Vyas.
Diffstat (limited to 'challenge-133')
-rw-r--r--challenge-133/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-133/jaldhar-h-vyas/perl/ch-1.pl38
-rwxr-xr-xchallenge-133/jaldhar-h-vyas/perl/ch-2.pl91
-rwxr-xr-xchallenge-133/jaldhar-h-vyas/raku/ch-1.raku24
-rwxr-xr-xchallenge-133/jaldhar-h-vyas/raku/ch-2.raku47
5 files changed, 201 insertions, 0 deletions
diff --git a/challenge-133/jaldhar-h-vyas/blog.txt b/challenge-133/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..c4a754e865
--- /dev/null
+++ b/challenge-133/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2021/10/perl_weekly_challenge_week_133.html
diff --git a/challenge-133/jaldhar-h-vyas/perl/ch-1.pl b/challenge-133/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..b304e31fdd
--- /dev/null
+++ b/challenge-133/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+use English qw / -no_match_vars /;
+
+sub usage {
+print<<"-USAGE-";
+Usage:
+ $PROGRAM_NAME <n>
+
+ <n> an integer
+-USAGE-
+ exit 0;
+}
+
+sub squareRoot {
+ my ($n) = @_;
+
+ my $firstTry = $n >> 1;
+
+ if ( $firstTry ) {
+ my $nextTry = ( $firstTry + $n / $firstTry) >> 1;
+
+ while ( $nextTry < $firstTry) {
+ $firstTry = $nextTry;
+ $nextTry = ( $firstTry + $n / $firstTry) >> 1;
+ }
+
+ return $firstTry;
+ } else {
+ return $n;
+ }
+}
+
+
+my $n = shift // usage;
+
+say squareRoot($n); \ No newline at end of file
diff --git a/challenge-133/jaldhar-h-vyas/perl/ch-2.pl b/challenge-133/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..3ae243fd3d
--- /dev/null
+++ b/challenge-133/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+
+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();
+ }
+}
+
+sub sum {
+ my ($arr) = @_;
+ my $total = 0;
+
+ for my $elem (@{$arr}) {
+ $total += $elem;
+ }
+
+ return $total;
+}
+
+sub isSmith {
+ my ($n) = @_;
+ my @digits = split //, $n;
+
+ my @primeFactors;
+ factorize($n, \@primeFactors);
+ if (scalar @primeFactors < 2) {
+ return undef;
+ }
+
+ @primeFactors = map { my @d = split //, $_; sum(\@d); } @primeFactors;
+
+ return sum(\@digits) == sum(\@primeFactors);
+}
+
+my @smiths = ();
+my $n = 1;
+
+while (scalar @smiths < 10) {
+ if (isSmith($n)) {
+ push @smiths, $n;
+ }
+ $n++;
+}
+
+say join ", ", @smiths; \ No newline at end of file
diff --git a/challenge-133/jaldhar-h-vyas/raku/ch-1.raku b/challenge-133/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..a5a4caa0f1
--- /dev/null
+++ b/challenge-133/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,24 @@
+#!/usr/bin/raku
+
+sub squareRoot(Int $n) {
+ my $firstTry = $n +> 1;
+
+ if $firstTry {
+ my $nextTry = ( $firstTry + $n / $firstTry) +> 1;
+
+ while $nextTry < $firstTry {
+ $firstTry = $nextTry;
+ $nextTry = ( $firstTry + $n / $firstTry) +> 1;
+ }
+
+ return $firstTry;
+ } else {
+ return $n;
+ }
+}
+
+sub MAIN(
+ Int $n #= an integer
+) {
+ say squareRoot($n);
+} \ No newline at end of file
diff --git a/challenge-133/jaldhar-h-vyas/raku/ch-2.raku b/challenge-133/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..c239d90e9b
--- /dev/null
+++ b/challenge-133/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,47 @@
+#!/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 isSmith($n) {
+ my @digits = $n.comb;
+
+ my @primeFactors;
+ factorize($n, @primeFactors);
+ if @primeFactors.elems < 2 {
+ return;
+ }
+
+ @primeFactors = @primeFactors.map({ [+] $_.comb; });
+
+ if ([+] @digits) == ([+] @primeFactors) {
+ take $n;
+ }
+}
+
+sub MAIN() {
+ my @smiths = lazy gather {
+ for 1 .. * -> $n {
+ isSmith($n)
+ }
+ }
+
+ @smiths[^10].join(', ').say;
+} \ No newline at end of file