Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
69
Task/Hailstone-sequence/Tiny-BASIC/hailstone-sequence.basic
Normal file
69
Task/Hailstone-sequence/Tiny-BASIC/hailstone-sequence.basic
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
PRINT "Enter a positive integer"
|
||||
INPUT N REM unit column
|
||||
LET M = 0 REM 32766 column
|
||||
LET C = 1 REM count
|
||||
LET P = 1 REM print the sequence?
|
||||
LET L = 1 REM finite state label
|
||||
GOSUB 10
|
||||
LET F = 1 REM current champion
|
||||
LET E = 0 REM 32766 part of current champ
|
||||
LET Y = 1 REM length of current longest sequence
|
||||
LET P = 0 REM no more printing
|
||||
LET W = 0 REM currently testing this number
|
||||
LET V = 0 REM 32766 column of the number
|
||||
PRINT "Testing for longest chain for n<100000..."
|
||||
5 LET W = W + 1
|
||||
REM PRINT V, " ", W
|
||||
LET N = W
|
||||
LET M = V
|
||||
LET C = 1 REM reset count
|
||||
IF W = 32766 THEN GOSUB 50
|
||||
GOSUB 10
|
||||
IF C > Y THEN GOSUB 60
|
||||
IF V = 3 THEN IF W = 1702 THEN GOTO 8
|
||||
GOTO 5
|
||||
8 PRINT "The longest sequence starts at 32766x",E," + ",F
|
||||
PRINT "And goes for ",Y," steps."
|
||||
END
|
||||
|
||||
10 IF P = 1 THEN IF M > 0 THEN PRINT C," 32766x",M," + ",N
|
||||
IF P = 1 THEN IF M = 0 THEN PRINT C," ",N
|
||||
IF M = 0 THEN IF N = 1 THEN RETURN
|
||||
LET C = C + 1
|
||||
IF 2*(N/2)=N THEN GOTO 20
|
||||
IF M > 10922 THEN GOTO 100
|
||||
IF N > 21844 THEN GOTO 30
|
||||
IF N > 10922 THEN GOTO 40
|
||||
|
||||
LET N = 3*N + 1
|
||||
LET M = 3*M
|
||||
GOTO 10
|
||||
|
||||
20 LET N = N/2
|
||||
IF (M/2)*2<>M THEN LET N = N + 16383 REM account for integer truncation
|
||||
LET M=M/2
|
||||
GOTO 10
|
||||
|
||||
30 LET N = N - 21844 REM two ways of accounting for overflow
|
||||
LET N = 3*N + 1
|
||||
LET M = 3*M + 2
|
||||
GOTO 10
|
||||
|
||||
40 LET N = N - 10922
|
||||
LET N = 3*N + 1
|
||||
LET M = 3*M + 1
|
||||
GOTO 10
|
||||
|
||||
50 LET W = 0 REM addition with carry
|
||||
LET V = V + 1
|
||||
RETURN
|
||||
|
||||
60 LET Y = C REM tracking current champion
|
||||
LET F = W
|
||||
LET E = V
|
||||
RETURN
|
||||
|
||||
100 PRINT "Uh oh, getting an overflow for 32766x",V," + ",W
|
||||
PRINT "at step number ",C
|
||||
PRINT "trying to triple 32766x",M," + ",N
|
||||
RETURN
|
||||
Loading…
Add table
Add a link
Reference in a new issue