1
0
Fork 0
adventofcode/2017/3/spiral.py

30 lines
894 B
Python
Executable File

#!/usr/bin/python3
from math import ceil, floor, sqrt
def get_steps(m):
"""Nombre d'étapes pour le mouvement en spirale."""
# Calcul de la couche de spirale
n = ceil((sqrt(m) - 1) / 2)*2+1
# Calcul des valeurs de tous les coins de la "couche" de spirale
edges = sorted([n ** 2 - i * (n - 1) for i in range(4)])
# Mouvements depuis un coin
edgemvt = n - 1
if m in edges:
return edgemvt
# Sinon, on compte à partir du coin supérieur au nombre
for e in range(3):
if edges[e] < n:
continue
print(edges[e])
# Si on n'a pas encore atteint le milieu du côté de la couche
if (n ** 2 - m) <= floor(n / 2):
print('<=')
return edgemvt - (edges[e] - m)
return edges[e] - m
if __name__ == '__main__':
print("Square number : ", end="")
print(get_steps(int(input())))