From 94fb28dfc245aa113d639ba489706b3aff42fd4f Mon Sep 17 00:00:00 2001 From: drbaggy Date: Mon, 4 Oct 2021 10:25:30 +0100 Subject: soln to v1 --- challenge-133/james-smith/perl/ch-1.pl | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 challenge-133/james-smith/perl/ch-1.pl diff --git a/challenge-133/james-smith/perl/ch-1.pl b/challenge-133/james-smith/perl/ch-1.pl new file mode 100644 index 0000000000..5a342656e6 --- /dev/null +++ b/challenge-133/james-smith/perl/ch-1.pl @@ -0,0 +1,39 @@ +#!/usr/local/bin/perl + +use strict; + +use warnings; +use feature qw(say); +use Test::More; +use Benchmark qw(cmpthese timethis); +use Data::Dumper qw(Dumper); + +my @TESTS = ( + [ 10, 3 ], + [ 27, 5 ], + [ 85, 9 ], + [ 101, 10 ], + [ 418529770, 20458 ], +); + +is( find_root($_->[0]), $_->[1] ) foreach @TESTS; + +done_testing(); + +sub find_root { + my $n = shift; + ## Make order of magnitude guess + my ($l,$r) = (1 & length $n ) ? ( 10 ** int(0.5*length $n), 3.2 * 10 ** int(0.5*length $n) ) + : ( 0.3 * 10 ** int(0.5*length $n), 10 ** int(0.5*length $n) ); + while($r - $l > 1) { + print "+"; + my $m = $l + int(( $r-$l)/2); + if( $m*$m < $n ) { + $l=$m; + } else { + $r=$m; + } + } + return $l; +} + -- cgit