summary refs log tree commit diff stats
path: root/day3.ml
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 *)