39 lines
770 B
Python
39 lines
770 B
Python
from lib import *
|
|
|
|
input = read_input(2017, 3)
|
|
|
|
|
|
num = int(input)
|
|
i = (int((num - 1) ** 0.5) + 1) // 2
|
|
a, b = (i * 2 - 1) ** 2, (i * 2 + 1) ** 2
|
|
out = 1e1337
|
|
for j in range(4):
|
|
t = j / 4 + 0.125
|
|
out = min(out, abs(num - int((1 - t) * a + t * b)))
|
|
print(out + i)
|
|
|
|
|
|
def iter_steps():
|
|
x, y = 0, 0
|
|
dx, dy = 1, 0
|
|
s = 0
|
|
i = 1
|
|
while True:
|
|
yield x, y
|
|
i += 1
|
|
x += dx
|
|
y += dy
|
|
if i >= (s * 2 + 1) ** 2:
|
|
s += 1
|
|
if abs(x + dx) > s or abs(y + dy) > s:
|
|
dx, dy = dy, -dx
|
|
|
|
|
|
grid = {}
|
|
k = int(input)
|
|
for x, y in iter_steps():
|
|
s = sum(grid.get((x + i, y + j), 0) for i in [-1, 0, 1] for j in [-1, 0, 1] if i or j) or 1
|
|
grid[(x, y)] = s
|
|
if s > k:
|
|
print(s)
|
|
break
|