comment Compute and display "hailstone" (i.e., Collatz) sequence for a given number and find the longest sequence in the range permitted by S-BASIC's 16-bit integer data type. end $lines $constant false = 0 $constant true = FFFFH rem - compute p mod q function mod(p, q = integer) = integer end = p - q * (p/q) comment Compute, and optionally display, hailstone sequence for n. Return length of sequence or zero on overflow end function hailstone(n, display = integer) = integer var length = integer length = 1 while (n <> 1) and (n > 0) do begin if display then print using "##### ", n; if mod(n,2) = 0 then n = n / 2 else n = (n * 3) + 1 length = length + 1 end if display then print using "##### ", n rem - return 0 on overflow if n < 0 then length = 0 end = length var n, limit, slen, longest, n_longest = integer input "Display hailstone sequence for what number"; n slen = hailstone(n, true) print "Sequence length = "; slen rem - find longest sequence before overflow n = 2 longest = 1 slen = 1 limit = 1000; print "Searching for longest sequence up to N =", limit," ..." while (n < limit) and (slen <> 0) do begin slen = hailstone(n, false) if slen > longest then begin longest = slen n_longest = n end n = n + 1 end if slen = 0 then print "Search terminated with overflow at";n-1 print "Maximum sequence length =";longest;" for N =";n_longest end