47 lines
1.1 KiB
Plaintext
47 lines
1.1 KiB
Plaintext
DIM @environ$(12)
|
|
@% = 4 : REM Column width
|
|
|
|
REM Initialise:
|
|
FOR E% = 1 TO 12
|
|
PROCsetenvironment(@environ$(E%))
|
|
seq% = E%
|
|
cnt% = 0
|
|
@environ$(E%) = FNgetenvironment
|
|
NEXT
|
|
|
|
REM Run hailstone sequences:
|
|
REPEAT
|
|
T% = 0
|
|
FOR E% = 1 TO 12
|
|
PROCsetenvironment(@environ$(E%))
|
|
PRINT seq% ;
|
|
IF seq% <> 1 THEN
|
|
T% += 1
|
|
cnt% += 1
|
|
IF seq% AND 1 seq% = 3 * seq% + 1 ELSE seq% DIV= 2
|
|
ENDIF
|
|
@environ$(E%) = FNgetenvironment
|
|
NEXT
|
|
PRINT
|
|
UNTIL T% = 0
|
|
|
|
REM Print counts:
|
|
PRINT "Counts:"
|
|
FOR E% = 1 TO 12
|
|
PROCsetenvironment(@environ$(E%))
|
|
PRINT cnt% ;
|
|
@environ$(E%) = FNgetenvironment
|
|
NEXT
|
|
PRINT
|
|
END
|
|
|
|
DEF FNgetenvironment
|
|
LOCAL e$ : e$ = STRING$(216, CHR$0)
|
|
SYS "RtlMoveMemory", !^e$, ^@%+108, 216
|
|
= e$
|
|
|
|
DEF PROCsetenvironment(e$)
|
|
IF LEN(e$) < 216 e$ = STRING$(216, CHR$0)
|
|
SYS "RtlMoveMemory", ^@%+108, !^e$, 216
|
|
ENDPROC
|