aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2021-10-04 10:25:30 +0100
committerdrbaggy <js5@sanger.ac.uk>2021-10-04 10:25:30 +0100
commit94fb28dfc245aa113d639ba489706b3aff42fd4f (patch)
tree614fa4b47f6cacb8c4682448b6cd1df2cb450b63
parent9a645713d1b12db953ac62cb92b607f09e81fe6a (diff)
downloadperlweeklychallenge-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.pl39
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;
+}
+