blob: bcca156b8e285dba95f0ad23308cd14c1533704a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
open Float
let input = 265149
let coordinates n =
let k = int_of_float (ceil (((sqrt (float_of_int n)) -. 1.) /. 2.)) in
let t = 1 + (2 * k) in
let m = int_of_float ((float_of_int t) ** 2.) in
let t = t - 1 in
if n >= m - t then
(k - (m - n), -k)
else if n >= m - (2 * t) then
(-k, -k + (m - n))
else if n >= m - (3 * t) then
(-k + (m - n), k)
else
(k, k - (m - n - t))
let () =
let (x, y) = coordinates input in
Printf.printf "%d\n" (Int.abs x + Int.abs y)
(* Part 2 is listed on OEIS *)
|