#+title: Challenge 133
#+date: 2021-10-04
#+html_link_up: ../
#+export_file_name: index
#+options: toc:nil
#+setupfile: ~/.emacs.d/org-templates/level-2.org
* Task 1 - Integer Square Root
You are given a positive integer ~$N~.
Write a script to calculate the integer square root of the given number.
Please avoid using built-in function. Find out more about it [[https://en.wikipedia.org/wiki/Integer_square_root][here]].
#+begin_src
Input: $N = 10
Output: 3
Input: $N = 27
Output: 5
Input: $N = 85
Output: 9
Input: $N = 101
Output: 10
#+end_src
** Raku
- Program: [[file:raku/ch-1.raku]]
Initial estimate is set to ~$n +> 1~, then we loop infinitely until
previous 2 estimates are equal.
#+begin_src raku
my $x = $n +> 1;
loop {
given ($x + ($n / $x)) / 2 {
last if $x == $_;
$x = $_;
}
}
put $x;
#+end_src
** C
- Program: [[file:c/ch-1.c]]
~argv~ holds the input & ~argc~ holds the number of inputs. The input should
be a single integer so ~argc~ should be equal to 2. After checking for
that, we check if valid value was passed.
Loop until previous 2 estimates are equal.
#+begin_src c
double x = num >> 1;
for (;;) {
double x_next = (x + (num / x)) / 2;
if (x == x_next)
break;
x = x_next;
}
printf("%f\n", x);
#+end_src