diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-10 21:02:37 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-10 21:02:37 +0000 |
| commit | 83c06179ec18557d73ddd24d52cc4ec51abe1333 (patch) | |
| tree | 74dc4296d15af3fe03b6e8eebd736645f56b3125 /challenge-147 | |
| parent | 7fe7725aa24fe0e1355d0c44452034d05914df31 (diff) | |
| download | perlweeklychallenge-club-83c06179ec18557d73ddd24d52cc4ec51abe1333.tar.gz perlweeklychallenge-club-83c06179ec18557d73ddd24d52cc4ec51abe1333.tar.bz2 perlweeklychallenge-club-83c06179ec18557d73ddd24d52cc4ec51abe1333.zip | |
- Added Perl solution to the task "Truncatable Prime" of week 147.
- Added Raku solution to the task "Truncatable Prime" of week 147.
Diffstat (limited to 'challenge-147')
| -rw-r--r-- | challenge-147/mohammad-anwar/perl/ch-1.pl | 81 | ||||
| -rw-r--r-- | challenge-147/mohammad-anwar/raku/ch-1.raku | 63 |
2 files changed, 144 insertions, 0 deletions
diff --git a/challenge-147/mohammad-anwar/perl/ch-1.pl b/challenge-147/mohammad-anwar/perl/ch-1.pl new file mode 100644 index 0000000000..e61081de32 --- /dev/null +++ b/challenge-147/mohammad-anwar/perl/ch-1.pl @@ -0,0 +1,81 @@ +#!/usr/bin/perl + +=head1 + +Week 147: + + https://theweeklychallenge.org/blog/perl-weekly-challenge-147 + +Task #1: Truncatable Prime + + Write a script to generate first 20 left-truncatable prime numbers in base 10. + +=cut + +use strict; +use warnings; +use Test::More; +use Test::Deep; + +is_deeply( + left_truncatable_primes(20), + [ 2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197 ], + 'Example' +); + +done_testing; + +# +# +# METHODS + +sub left_truncatable_primes { + my ($count) = @_; + + my $ltp = []; + my $c = 0; + my $n = 2; + while ($c < $count) { + if (($n !~ /0/) && is_prime($n)) { + my @n = left_truncatable_numbers($n); + my $found = 1; + if (@n >= 2) { + foreach my $_n (@n) { + $found = 0 unless (is_prime($_n)); + } + } + if ($found) { + push @$ltp, $n; + $c++; + } + } + $n++; + } + + return $ltp; +} + +sub left_truncatable_numbers { + my ($n) = @_; + + my @n = (); + my $i = 0; + while ($i < length($n)) { + push @n, substr($n, $i); + $i++; + } + + return @n; +} + +sub is_prime { + my ($n) = @_; + + return 0 if ($n == 1); + + foreach my $i (2 .. sqrt $n) { + return 0 unless $n % $i + } + + return 1; +} diff --git a/challenge-147/mohammad-anwar/raku/ch-1.raku b/challenge-147/mohammad-anwar/raku/ch-1.raku new file mode 100644 index 0000000000..da23ec26f1 --- /dev/null +++ b/challenge-147/mohammad-anwar/raku/ch-1.raku @@ -0,0 +1,63 @@ +#!/usr/bin/env raku + +=begin pod + +Week 147: + + https://theweeklychallenge.org/blog/perl-weekly-challenge-147 + +Task #1: Truncatable Prime + + Write a script to generate first 20 left-truncatable prime numbers in base 10. + +=end pod + +use Test; + +is-deeply( + left-truncatable-primes(20), + [ 2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197 ], + 'Example' +); + +done-testing; + +# +# +# METHODS + +sub left-truncatable-primes(Int $count) { + my $ltp = []; + my Int $c = 0; + my Int $n = 2; + while $c < $count { + if $n !~~ /0/ && $n.is-prime { + my @n = left-truncatable-numbers($n); + my Bool $found = True; + if @n.elems >= 2 { + for @n -> $_n { + $found = False unless $_n.is-prime; + } + } + if ($found) { + $ltp.push: $n; + $c++; + } + } + $n++; + } + + return $ltp; +} + +sub left-truncatable-numbers(Int $n) { + + my @n = (); + my Int $i = 0; + while $i < $n.codes { + @n.push: substr($n, $i); + $i++; + } + + return @n; +} |
