aboutsummaryrefslogtreecommitdiff
path: root/challenge-147
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-10 21:02:37 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-10 21:02:37 +0000
commit83c06179ec18557d73ddd24d52cc4ec51abe1333 (patch)
tree74dc4296d15af3fe03b6e8eebd736645f56b3125 /challenge-147
parent7fe7725aa24fe0e1355d0c44452034d05914df31 (diff)
downloadperlweeklychallenge-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.pl81
-rw-r--r--challenge-147/mohammad-anwar/raku/ch-1.raku63
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;
+}