diff options
| author | 冯昶 <seaker@qq.com> | 2022-04-12 16:32:06 +0800 |
|---|---|---|
| committer | 冯昶 <seaker@qq.com> | 2022-04-12 16:32:06 +0800 |
| commit | 65e9cda555ba021416fefa566bc87d5723d805f7 (patch) | |
| tree | 7c51d92e9140e569e98faa2e929e299b50c6125f /challenge-158 | |
| parent | 512325784ffcf08208fc351310377776217eca7e (diff) | |
| parent | 6e220136f3cd0b6189d3ea501127ae7b8531b0c6 (diff) | |
| download | perlweeklychallenge-club-65e9cda555ba021416fefa566bc87d5723d805f7.tar.gz perlweeklychallenge-club-65e9cda555ba021416fefa566bc87d5723d805f7.tar.bz2 perlweeklychallenge-club-65e9cda555ba021416fefa566bc87d5723d805f7.zip | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-158')
112 files changed, 3524 insertions, 102 deletions
diff --git a/challenge-158/0rir/raku/ch-1.raku b/challenge-158/0rir/raku/ch-1.raku new file mode 100644 index 0000000000..523335f473 --- /dev/null +++ b/challenge-158/0rir/raku/ch-1.raku @@ -0,0 +1,28 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtabs +use v6.d; + +# TASK #1 › Additive Primes to 100 +# An additive prime is a prime number whose decimal digits +# sum to a prime. + +my $expected = "2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89"; + +my @prime = 2, 3, { first * %% none(@_), (@_[*-1], *+2 … ∞) } … ∞; + +sub _is-additive( Any $n --> Bool ) { + return True if ( [+] $n.Str.split( '' ) ).is-prime; + False; +} + +my @result; + +for @prime -> $ap { + last if $ap > 100; + @result.push( $ap) if $ap.&_is-additive; +} +my $out = @result.join( ', '); + +die 'Logic error.' if $out ne $expected; + +say $out; diff --git a/challenge-158/0rir/raku/ch-2.raku b/challenge-158/0rir/raku/ch-2.raku new file mode 100644 index 0000000000..b39e69391f --- /dev/null +++ b/challenge-158/0rir/raku/ch-2.raku @@ -0,0 +1,27 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtabs +use v6.d; + +# TASK #2 › First Series Cuban Primes + +my $want = 1000; + +my @expect; +my @correct = 7, 19, 37, 61, 127, 271, 331, 397, 547, 631, 919, + 1657, 1801, 1951, 2269, 2437, 2791, 3169, 3571, 4219, 4447, + 5167, 5419, 6211, 7057, 7351, 8269, 9241, + 10267, 11719, 12097, 13267, 13669, + 16651, 19441, 19927, 22447, 23497, 24571, 25117, 26227; + +my @cuban-prime; + for 1 .. ∞ { + my $cp = ($_+1)³ - $_³; + last if $cp > $want; + if $cp.is-prime { + @cuban-prime.push: $cp; + @expect.push: @correct.shift; + } +}; + +die 'Logic error.' unless @cuban-prime eqv @expect; +say @cuban-prime.join( ', '), '.'; diff --git a/challenge-158/alexander-pankoff/perl/ch-1.pl b/challenge-158/alexander-pankoff/perl/ch-1.pl new file mode 100755 index 0000000000..5818eb641e --- /dev/null +++ b/challenge-158/alexander-pankoff/perl/ch-1.pl @@ -0,0 +1,34 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use feature qw'say state signatures'; +no warnings qw'experimental::signatures'; + +use List::Util qw(sum0); + +run() unless caller(); + +sub run() { + say join( ', ', additive_primes() ); +} + +sub additive_primes($max = 100) { + return grep { is_prime($_) && is_prime( digit_sum($_) ) } 2 .. $max; +} + +# from challenge 150 task 2 +sub is_prime($x) { + return 0 if $x <= 1; + return 1 if $x <= 3; + for ( my $i = 2 ; $i <= sqrt($x) ; $i++ ) { + return 0 if $x % $i == 0; + } + return 1; +} + +# from challenge 149 task 1 +sub digit_sum($x) { + my $sum = sum0 split( '', $x ); + + return $sum; +} diff --git a/challenge-158/alexander-pankoff/perl/ch-2.pl b/challenge-158/alexander-pankoff/perl/ch-2.pl new file mode 100755 index 0000000000..b672d273e5 --- /dev/null +++ b/challenge-158/alexander-pankoff/perl/ch-2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use feature qw'say state signatures'; +no warnings qw'experimental::signatures'; + |
