diff options
| author | drbaggy <js5@sanger.ac.uk> | 2022-01-17 09:00:14 +0000 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2022-01-17 09:00:14 +0000 |
| commit | 990d5177887cda20c8a4804b91afe5e9bcaaf201 (patch) | |
| tree | 8c2ae1ac10ff43e872f3cab2611255c76841f4c3 /challenge-147/steven-wilson | |
| parent | dd99d53e09a332c4ff5153b8bb54c9506a03860d (diff) | |
| parent | ee9f8c8288170dc442f8199fc1d2f7e45ac4377c (diff) | |
| download | perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.tar.gz perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.tar.bz2 perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.zip | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-147/steven-wilson')
| -rwxr-xr-x | challenge-147/steven-wilson/javascript/ch-2.js | 38 | ||||
| -rw-r--r-- | challenge-147/steven-wilson/perl/ch-1.pl | 39 | ||||
| -rw-r--r-- | challenge-147/steven-wilson/perl/ch-2.pl | 41 |
3 files changed, 118 insertions, 0 deletions
diff --git a/challenge-147/steven-wilson/javascript/ch-2.js b/challenge-147/steven-wilson/javascript/ch-2.js new file mode 100755 index 0000000000..36fadd5903 --- /dev/null +++ b/challenge-147/steven-wilson/javascript/ch-2.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node +// Week 147 Task 2 +// Pentagon Numbers +// Write a sript to find the first pair of Pentagon Numbers +// whose sum and difference are also a Pentagon Number. +// Answer: First pair is 1560090 and 7042750 + +var pentagonal_numbers = [1] +var pair_found = false +var number = 2 + +while (!pair_found) { + let next_pn = pentagonal_number(number) + for (let i = 0; i < pentagonal_numbers.length; i++) { + if ((is_pentagonal_number(next_pn - pentagonal_numbers[i])) && + (is_pentagonal_number(next_pn + pentagonal_numbers[i]))) { + console.log('First pair are ' + pentagonal_numbers[i] + ' and ' + next_pn) + pair_found = true + break + } + } + pentagonal_numbers.push(next_pn) + number++ +} + +function pentagonal_number (number) { + return ( ( 3 * ( number * number ) ) - number ) / 2 +} + +function is_pentagonal_number (number) { + let remainder = ( Math.sqrt( 24 * number + 1 ) + 1 ) % 6; + if ( remainder > 0 ) { + return false + } + else { + return true + } +} diff --git a/challenge-147/steven-wilson/perl/ch-1.pl b/challenge-147/steven-wilson/perl/ch-1.pl new file mode 100644 index 0000000000..ceefab2a3d --- /dev/null +++ b/challenge-147/steven-wilson/perl/ch-1.pl @@ -0,0 +1,39 @@ +#!/usr/bin/env perl +# Week 147 Task 1 +# Truncatable Prime +# Write a script to generate first 20 left-truncatable prime numbers in base 10. + +use strict; +use warnings; +use feature qw/ say /; +use Math::Prime::Util qw/ next_prime is_prime /; + +my @ltp = qw/ 2 /; +my $prime_number = 2; + +while ( scalar @ltp < 20 ) { + $prime_number = next_prime($prime_number); + if ( is_truncatable_prime($prime_number) ) { + push @ltp, $prime_number; + } +} + +sub is_truncatable_prime { + my $prime_number = shift; + my $truncatable = 1; + while ( length $prime_number > 0 ) { + if ( $prime_number =~ /0/ ) { # contains no 0 + $truncatable = 0; + last; + } + if ( not is_prime($prime_number) ) { + $truncatable = 0; + last; + } + $prime_number =~ /^[0-9]{1}([0-9]*)/; + $prime_number = $1; + } + return $truncatable; +} + +say join " ", @ltp; diff --git a/challenge-147/steven-wilson/perl/ch-2.pl b/challenge-147/steven-wilson/perl/ch-2.pl new file mode 100644 index 0000000000..d1bf716a76 --- /dev/null +++ b/challenge-147/steven-wilson/perl/ch-2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl +# Week 147 Task 2 +# Pentagon Numbers +# Write a sript to find the first pair of Pentagon Numbers +# whose sum and difference are also a Pentagon Number. +# Answer: First pair is 1560090 and 7042750 + +use strict; +use warnings; +use feature qw/ say /; +use POSIX qw/ fmod /; + +my @pentagonal_numbers = qw/ 1 /; +my $first_pair_found = 0; +my $number = 2; + +while ( not $first_pair_found ) { + my $next_pn = pentagonal_number($number); + for (@pentagonal_numbers) { + if ( is_pentagonal_number( $next_pn - $_ ) + and is_pentagonal_number( $next_pn + $_ ) ) + { + say "First pair is $_ and $next_pn"; + $first_pair_found = 1; + last; + } + } + push @pentagonal_numbers, $next_pn; + $number++; +} + +sub pentagonal_number { + my $n = shift; + return ( ( 3 * ( $n * $n ) ) - $n ) / 2; +} + +sub is_pentagonal_number { + my $x = shift; + my $remainder = fmod( sqrt( 24 * $x + 1 ) + 1, 6 ); + $remainder > 0 ? return 0 : return 1; +} |
