From 0442cd8a85d8849d7b61bf5908460d4a562350a1 Mon Sep 17 00:00:00 2001 From: Dave Jacoby Date: Wed, 19 Jan 2022 05:25:16 -0500 Subject: Challenge 148 --- challenge-148/dave-jacoby/blog.txt | 1 + challenge-148/dave-jacoby/perl/ch-1.pl | 19 ++++++++++++++ challenge-148/dave-jacoby/perl/ch-2.pl | 48 ++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 challenge-148/dave-jacoby/blog.txt create mode 100644 challenge-148/dave-jacoby/perl/ch-1.pl create mode 100644 challenge-148/dave-jacoby/perl/ch-2.pl diff --git a/challenge-148/dave-jacoby/blog.txt b/challenge-148/dave-jacoby/blog.txt new file mode 100644 index 0000000000..73299f8ca6 --- /dev/null +++ b/challenge-148/dave-jacoby/blog.txt @@ -0,0 +1 @@ +https://jacoby.github.io/2022/01/19/its-triplets-weekly-challenge-148.html diff --git a/challenge-148/dave-jacoby/perl/ch-1.pl b/challenge-148/dave-jacoby/perl/ch-1.pl new file mode 100644 index 0000000000..bf62ab2981 --- /dev/null +++ b/challenge-148/dave-jacoby/perl/ch-1.pl @@ -0,0 +1,19 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw{ say postderef signatures state }; +no warnings qw{ experimental }; + +use Lingua::EN::Numbers qw( num2en ); + +# You COULD try to make up a way to do this, but this wheel has been +# invented already and is sufficiently round. + +my @numbers; +for my $i ( 0 .. 100 ) { + my $e = num2en $i; + next if $e =~ /e/mx; + push @numbers, $i; +} +say join ', ', @numbers; diff --git a/challenge-148/dave-jacoby/perl/ch-2.pl b/challenge-148/dave-jacoby/perl/ch-2.pl new file mode 100644 index 0000000000..330ce7e8d0 --- /dev/null +++ b/challenge-148/dave-jacoby/perl/ch-2.pl @@ -0,0 +1,48 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw{ say postderef signatures state }; +no warnings qw{ experimental }; + +use Algorithm::Permute; + +my @triplets; + +my $i = 0; +while ( scalar @triplets < 5 ) { + for my $j ( 1 .. $i ) { + for my $k ( 1 .. $j ) { + my $p = Algorithm::Permute->new( [ $i, $j, $k ] ); + while ( my @res = $p->next ) { + my $t = test_cardano(@res); + if ( $t == 1 ) { + push @triplets, \@res; + } + } + } + } + $i++; + last if $i > 1000; +} + +for my $ct (@triplets) { + my ( $a, $b, $c ) = $ct->@*; + print <<"END"; + A: $a\tB: $b\tC: $c +END +} + +sub test_cardano ( $a, $b, $c ) { + my $sqrtc = sqrt $c; + + # not necessary for the first five + if ( $a > $b * $sqrtc ) { + return cuberoot( $a + $b * $sqrtc ) + cuberoot( $a - $b * $sqrtc ); + } + + return cuberoot( $a + $b * $sqrtc ) + + -1 * cuberoot( abs( $a - $b * $sqrtc ) ); +} + +sub cuberoot ($n ) { return $n**( 1 / 3 ) } -- cgit