diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2021-10-10 23:19:58 -0400 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2021-10-10 23:19:58 -0400 |
| commit | 01b2c858c49b3521b97f18215bc93de4004df899 (patch) | |
| tree | 707c0ccd807208ee185fd5c4e9b01f24dd62e947 /challenge-133 | |
| parent | 0cbc830f7a2365933cb31b4bb5f98cf4927a63bc (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-133/jaldhar-h-vyas/perl/ch-1.pl | 38 | ||||
| -rwxr-xr-x | challenge-133/jaldhar-h-vyas/perl/ch-2.pl | 91 | ||||
| -rwxr-xr-x | challenge-133/jaldhar-h-vyas/raku/ch-1.raku | 24 | ||||
| -rwxr-xr-x | challenge-133/jaldhar-h-vyas/raku/ch-2.raku | 47 |
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 |
