22 lines
639 B
Text
22 lines
639 B
Text
go =>
|
|
println([hamming(I) : I in 1..20]),
|
|
time(println(hamming_1691=hamming(1691))),
|
|
time(println(hamming_1000000=hamming(1000000))),
|
|
nl.
|
|
|
|
hamming(1) = 1.
|
|
hamming(2) = 2.
|
|
hamming(3) = 3.
|
|
hamming(N) = Hamming =>
|
|
A = new_array(N),
|
|
[Next2, Next3, Next5] = [2,3,5],
|
|
A[1] := Next2, A[2] := Next3, A[3] := Next5,
|
|
I = 0, J = 0, K = 0, M = 1,
|
|
while (M < N)
|
|
A[M] := min([Next2,Next3,Next5]),
|
|
if A[M] == Next2 then I := I+1, Next2 := 2*A[I] end,
|
|
if A[M] == Next3 then J := J+1, Next3 := 3*A[J] end,
|
|
if A[M] == Next5 then K := K+1, Next5 := 5*A[K] end,
|
|
M := M + 1
|
|
end,
|
|
Hamming = A[N-1].
|