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