From d2d37f4a76f7866fec9eae447068dfe519faedb3 Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Fri, 14 Jan 2022 11:25:06 +0000 Subject: add solution week 147 task 2 in perl --- challenge-147/steven-wilson/perl/ch-02.pl | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 challenge-147/steven-wilson/perl/ch-02.pl diff --git a/challenge-147/steven-wilson/perl/ch-02.pl b/challenge-147/steven-wilson/perl/ch-02.pl new file mode 100644 index 0000000000..65f41f0585 --- /dev/null +++ b/challenge-147/steven-wilson/perl/ch-02.pl @@ -0,0 +1,40 @@ +#!/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 210 and 330 + +use strict; +use warnings; +use feature qw/ say /; + +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 = ( sqrt( 24 * $x + 1 ) + 1 ) % 6; + $remainder > 0 ? return 0 : return 1; +} -- cgit From 8d0d58de8ba34070228f62b67b8c8fd7a4e27373 Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Fri, 14 Jan 2022 13:34:14 +0000 Subject: fix for floating point modulus --- challenge-147/steven-wilson/perl/ch-02.pl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/challenge-147/steven-wilson/perl/ch-02.pl b/challenge-147/steven-wilson/perl/ch-02.pl index 65f41f0585..d1bf716a76 100644 --- a/challenge-147/steven-wilson/perl/ch-02.pl +++ b/challenge-147/steven-wilson/perl/ch-02.pl @@ -3,11 +3,12 @@ # 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 210 and 330 +# 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; @@ -35,6 +36,6 @@ sub pentagonal_number { sub is_pentagonal_number { my $x = shift; - my $remainder = ( sqrt( 24 * $x + 1 ) + 1 ) % 6; + my $remainder = fmod( sqrt( 24 * $x + 1 ) + 1, 6 ); $remainder > 0 ? return 0 : return 1; } -- cgit From 91c79284313180190ba8873f00c1b643fa894a96 Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Fri, 14 Jan 2022 14:10:34 +0000 Subject: add solution week 147 task 2 in javascript --- challenge-147/steven-wilson/javascript/ch-02.js | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 challenge-147/steven-wilson/javascript/ch-02.js diff --git a/challenge-147/steven-wilson/javascript/ch-02.js b/challenge-147/steven-wilson/javascript/ch-02.js new file mode 100755 index 0000000000..36fadd5903 --- /dev/null +++ b/challenge-147/steven-wilson/javascript/ch-02.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 + } +} -- cgit