$ include "seed7_05.s7i"; const func array integer: hailstone (in var integer: n) is func result var array integer: hSequence is 0 times 0; begin while n <> 1 do hSequence &:= n; if odd(n) then n := 3 * n + 1; else n := n div 2; end if; end while; hSequence &:= n; end func; const func integer: hailstoneSequenceLength (in var integer: n) is func result var integer: sequenceLength is 1; begin while n <> 1 do incr(sequenceLength); if odd(n) then n := 3 * n + 1; else n := n div 2; end if; end while; end func; const proc: main is func local var integer: number is 0; var integer: length is 0; var integer: maxLength is 0; var integer: numberOfMaxLength is 0; var array integer: h27 is 0 times 0; begin for number range 1 to 99999 do length := hailstoneSequenceLength(number); if length > maxLength then maxLength := length; numberOfMaxLength := number; end if; end for; h27 := hailstone(27); writeln("hailstone(27):"); for number range 1 to 4 do write(h27[number] <& ", "); end for; write("...."); for number range length(h27) -3 to length(h27) do write(", " <& h27[number]); end for; writeln(" length=" <& length(h27)); writeln("Maximum length " <& maxLength <& " at number=" <& numberOfMaxLength); end func;