Babylonian spiral: Difference between revisions

Content added Content deleted
m (priority queue)
m (cleanup)
Line 174: Line 174:


function babylonian_spiral(N)
function babylonian_spiral(N)
sqsums = SquareSums()
dx, dy, points = 0, 1, [(0, 0)]
dx, dy, xydeltas = 0, 1, [(0, 0)]
for xys in SquareSums()
for xys in sqsums
for i in 1:length(xys)
for i in 1:length(xys)
a, b = xys[i]
a, b = xys[i]
Line 187: Line 186:
_, idx = findmax(p -> p[1] * dx + p[2] * dy, xys)
_, idx = findmax(p -> p[1] * dx + p[2] * dy, xys)
dx, dy = xys[idx]
dx, dy = xys[idx]
push!(xydeltas, (dx, dy))
push!(points, (points[end][1] + dx, points[end][2] + dy))
length(xydeltas) >= N && break
length(points) >= N && break
end
end
return accumulate((a, b) -> (a[1] + b[1], a[2] + b[2]), @view xydeltas[begin:N])
return @view points[begin:N]
end
end