우박수를 찾는 문제이다. 주어진 정수 n에 대해서 1까지 이르는 단계를 세는 함수를 만들고 1백만 이하에 대해서 모두 시행하여 가장 큰 값이 나오는 값을 찾으면 된다. (우박수열길이, 값)
의 튜플을 생성하고 가장 큰 값을 찾으면 간단하다. 다른 언어에서는 속도를 높이기 위해서 메모이제이션 등의 기법을 동원했는데, 줄리아는 그런 거 필요 없고 그냥 돌려도 빠르게 계산된다.
function h(n)
c = 1
while n > 1
n, c = iseven(n) ? n ÷ 2 : 3n + 1, c + 1
end
return c
end
@time [(h(x), x) for x=1:100_0000] |> maximum |> last |> println