aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/steven-wilson
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2022-01-17 09:00:14 +0000
committerdrbaggy <js5@sanger.ac.uk>2022-01-17 09:00:14 +0000
commit990d5177887cda20c8a4804b91afe5e9bcaaf201 (patch)
tree8c2ae1ac10ff43e872f3cab2611255c76841f4c3 /challenge-147/steven-wilson
parentdd99d53e09a332c4ff5153b8bb54c9506a03860d (diff)
parentee9f8c8288170dc442f8199fc1d2f7e45ac4377c (diff)
downloadperlweeklychallenge-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-xchallenge-147/steven-wilson/javascript/ch-2.js38
-rw-r--r--challenge-147/steven-wilson/perl/ch-1.pl39
-rw-r--r--challenge-147/steven-wilson/perl/ch-2.pl41
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;
+}