diff options
Diffstat (limited to 'challenge-167')
| -rw-r--r-- | challenge-167/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-167/laurent-rosenfeld/perl/ch-1.pl | 38 | ||||
| -rw-r--r-- | challenge-167/laurent-rosenfeld/raku/ch-1.raku | 18 |
3 files changed, 57 insertions, 0 deletions
diff --git a/challenge-167/laurent-rosenfeld/blog.txt b/challenge-167/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..7ddf8f231d --- /dev/null +++ b/challenge-167/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2022/05/perl-weekly-challenge-167-circular-primes.html diff --git a/challenge-167/laurent-rosenfeld/perl/ch-1.pl b/challenge-167/laurent-rosenfeld/perl/ch-1.pl new file mode 100644 index 0000000000..b5c8018430 --- /dev/null +++ b/challenge-167/laurent-rosenfeld/perl/ch-1.pl @@ -0,0 +1,38 @@ +use warnings; +use feature "say"; +use constant MAX => 10; + +my @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31); #Init small primes + +sub is_prime { + my $n = shift; + for my $p (@primes) { + return 1 if $p >= $n; + return 0 if $n % $p == 0; + } + return 1; +} + +sub rotate_and_test { + my $i = shift; + my $nb = length $i - 1; + for (1..$nb) { + $i = substr($i, 1) . substr($i, 0, 1); + return 0 unless is_prime $i; + $seen{$i} = 1; + } + return 1; +} + +my $max = 10; +my $count = 0; +my $n = 99; +while (1) { + $n += 2; + next unless is_prime $n; + next if $seen{$n}; + next unless rotate_and_test $n; + print "$n "; + $count++; + last if $count >= MAX; +} diff --git a/challenge-167/laurent-rosenfeld/raku/ch-1.raku b/challenge-167/laurent-rosenfeld/raku/ch-1.raku new file mode 100644 index 0000000000..2b23df25e0 --- /dev/null +++ b/challenge-167/laurent-rosenfeld/raku/ch-1.raku @@ -0,0 +1,18 @@ +my $max = 10; +my $count = 0; +for 101, 103 ...* -> $n { + next unless $n.is-prime; + next unless rotate-and-test $n; + print "$n "; + $count++; + last if $count >= $max; +} + +sub rotate-and-test ($i is copy) { + my $nb = $i.chars - 1; + for 0..^$nb { + $i = substr($i, 1) ~ substr($i, 0, 1); + return False unless $i.is-prime; + } + return True; +} |
