37 lines
825 B
Plaintext
37 lines
825 B
Plaintext
output =
|
|
println(format(fmt,
|
|
[seqLength, initSeq, tailSeq] ++ toList(longestPair)
|
|
))
|
|
|
|
fmt = """getSeq(27) (length): {}
|
|
getSeq(27) (first 4): {}
|
|
getSeq(27) (last 4): {}
|
|
max length {} for n = {}"""
|
|
|
|
-----------------------------------------------------------
|
|
|
|
seq = getSeq(27)
|
|
seqLength = length(seq)
|
|
initSeq = take(4, seq)
|
|
tailSeq = drop(seqLength - 4, seq)
|
|
|
|
-----------------------------------------------------------
|
|
|
|
longestPair =
|
|
range(1, 99999)
|
|
|> map(n => (length(getSeq(n)), n))
|
|
|> argmax(at(0))
|
|
|
|
-----------------------------------------------------------
|
|
-- generate full sequence
|
|
|
|
getSeq(n) =
|
|
iterate(step, n)
|
|
|> takeUntil(eq(1))
|
|
|
|
-----------------------------------------------------------
|
|
-- get the next number in a sequence
|
|
|
|
step(n) =
|
|
if n % 2 == 0 then round(n / 2) else n * 3 + 1
|