diff options
| author | drbaggy <js5@sanger.ac.uk> | 2021-10-04 10:25:30 +0100 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2021-10-04 10:25:30 +0100 |
| commit | 94fb28dfc245aa113d639ba489706b3aff42fd4f (patch) | |
| tree | 614fa4b47f6cacb8c4682448b6cd1df2cb450b63 | |
| parent | 9a645713d1b12db953ac62cb92b607f09e81fe6a (diff) | |
| download | perlweeklychallenge-club-94fb28dfc245aa113d639ba489706b3aff42fd4f.tar.gz perlweeklychallenge-club-94fb28dfc245aa113d639ba489706b3aff42fd4f.tar.bz2 perlweeklychallenge-club-94fb28dfc245aa113d639ba489706b3aff42fd4f.zip | |
soln to v1
| -rw-r--r-- | challenge-133/james-smith/perl/ch-1.pl | 39 |
1 files changed, 39 insertions, 0 deletions
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; +} + |
