diff options
Diffstat (limited to 'challenge-147')
108 files changed, 4272 insertions, 98 deletions
diff --git a/challenge-147/2colours/README b/challenge-147/2colours/README new file mode 100644 index 0000000000..6894fbec08 --- /dev/null +++ b/challenge-147/2colours/README @@ -0,0 +1 @@ +Solution By Márton Polgár. diff --git a/challenge-147/2colours/raku/ch-1.raku b/challenge-147/2colours/raku/ch-1.raku new file mode 100755 index 0000000000..5757fef8da --- /dev/null +++ b/challenge-147/2colours/raku/ch-1.raku @@ -0,0 +1,12 @@ +#!/usr/bin/env raku + +use experimental :cached; + +multi ltprimes(0, $) { ('') } +multi ltprimes($digits, $base) is cached { + (1..^$base).map(*.base: $base) X~ ltprimes($digits-1, $base) + andthen .grep(&is-prime)>>.Int +} + + +(1..*).map(*.<primes(10).Slip).head(20).say; diff --git a/challenge-147/2colours/raku/ch-2.raku b/challenge-147/2colours/raku/ch-2.raku new file mode 100755 index 0000000000..ca0dd53bd4 --- /dev/null +++ b/challenge-147/2colours/raku/ch-2.raku @@ -0,0 +1,18 @@ +#!/usr/bin/env raku + +sub is-pentagon($c) { (1+sqrt(1+24*$c))%%6 } + +sub P($n) { $n*(3*$n-1) div 2 #`(make rationals faster, pretty please) } + +OUTSIDE: +for 1..Inf -> $bigger { + for 1..^$bigger -> $smaller { + my $bigger-p = P($bigger); + my $smaller-p = P($smaller); + #my ($bigger-p, $smaller-p) = (P($bigger), P($smaller)); eliminate the runtime overhead of this destructuring, pretty please + if is-pentagon($bigger-p + $smaller-p) && is-pentagon($bigger-p - $smaller-p) { + say "P($bigger)=$bigger-p and P($smaller)=$smaller-p"; + last OUTSIDE; + } + } +} diff --git a/challenge-147/adam-russell/blog.txt b/challenge-147/adam-russell/blog.txt new file mode 100644 index 0000000000..6ba83d955a --- /dev/null +++ b/challenge-147/adam-russell/blog.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/perl/2022/01/16 diff --git a/challenge-147/adam-russell/blog1.txt b/challenge-147/adam-russell/blog1.txt new file mode 100644 index 0000000000..7b1bb684d3 --- /dev/null +++ b/challenge-147/adam-russell/blog1.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/prolog/2022/01/16 diff --git a/challenge-147/adam-russell/perl/ch-1.pl b/challenge-147/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..3940e53d2e --- /dev/null +++ b/challenge-147/adam-russell/perl/ch-1.pl @@ -0,0 +1,83 @@ +use strict; +use warnings; +## +# Write a script to generate first 20 left-truncatable prime numbers in base 10. +## +use boolean; +use constant N => 10_000; + +sub sieve_atkin{ + my($n) = @_; + my @primes = (2, 3, 5); + my $upper_bound = int($n * log($n) + $n * log(log($n))); + my @atkin = (false) x $upper_bound; + my @sieve = (1, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 49, 53, 59); + for my $x (1 .. sqrt($upper_bound)){ + for(my $y = 1; $y <= sqrt($upper_bound); $y+=2){ + my $m = (4 * $x ** 2) + ($y ** 2); + my @remainders; + @remainders = grep {$m % 60 == $_} (1, 13, 17, 29, 37, 41, 49, 53) if $m <= $upper_bound; + $atkin[$m] = !$atkin[$m] if @remainders; + } + } + for(my $x = 1; $x <= sqrt($upper_bound); $x += 2){ + for(my $y = 2; $y <= sqrt($upper_bound); $y += 2){ + my $m = (3 * $x ** 2) + ($y ** 2); + my @remainders; + @remainders = grep {$m % 60 == $_} (7, 19, 31, 43) if $m <= $upper_bound; + $atkin[$m] = !$atkin[$m] if @remainders; + } + } + for(my $x = 2; $x <= sqrt($upper_bound); $x++){ + for(my $y = $x - 1; $y >= 1; $y -= 2){ + my $m = (3 * $x ** 2) - ($y ** 2); + my @remainders; + @remainders = grep {$m % 60 == $_} (11, 23, 47, 59) if $m <= $upper_bound; + $atkin[$m] = !$atkin[$m] if @remainders; + } + } + my @m; + for my $w (0 .. ($upper_bound / 60)){ + for my $s (@sieve){ + push @m, 60 * $w + $s; + } + } + for my $m (@m){ + last if $upper_bound < ($m ** 2); + my $mm = $m ** 2; + if($atkin[$m]){ + for my $m2 (@m){ + my $c = $mm * $m2; + last if $c > $upper_bound; + $atkin[$c] = false; + } + } + } + map{ push @primes, $_ if $atkin[$_] } 0 .. @atkin - 1; + return @primes; +} + +sub truncatable{ + my($prime, $primes) = @_; + return false if $prime =~ m/0/; + my @truncatable = map { my $p = substr($prime, -1 * $_, $_); grep {$p == $_} @{$primes}} 1 .. length($prime); + return @truncatable == length($prime); +} + +sub first_n_truncatable_primes{ + my($n) = @_; + my @primes = sieve_atkin(N); + my @truncatable; + for my $prime (@primes){ + push @truncatable, $prime if truncatable($prime, \@primes); + last if @truncatable == $n; + } + return @truncatable; +} + + + +MAIN:{ + print join(", ", first_n_truncatable_primes(20)) . "\n"; + +}
\ No newline at end of file diff --git a/challenge-147/adam-russell/perl/ch-2.pl b/challenge-147/adam-russell/perl/ch-2.pl new file mode 100644 index 0000000000..0126f4a084 --- /dev/null +++ b/challenge-147/adam-russell/perl/ch-2.pl @@ -0,0 +1,49 @@ +use strict; +use warnings; +## +# Write a sript to find the first pair of Pentagon Numbers +# whose sum and difference are also a Pentagon Number. +## +use constant N => 10_000; + +sub n_pentagon_numbers{ + my($n) = @_; + my @pentagon_numbers; + my $x = 1; + my %h; + do{ + my $pentagon = $x * (3 * $x - 1) / 2; + push @pentagon_numbers, $pentagon; |
