I first heard of the Collatz-theorem in the late 70's, due to
"The calculating book" by James T. Rogers. It's fun to play
with it when being bored (like this:
https://ctrl-c.club/~balglaas/collatz/collatz.html ).
Recently I made a version which uses strings, so larger numbers
can be used.
=== 8< ==================================================
10 LET n=255
20 INPUT d$
30 GO SUB 150
40 IF checked=0 THEN GO TO 140
50 PRINT d$
60 LET l=LEN (d$)
70 REM while
80 IF d$(l)="1" OR d$(l)="3" OR d$(l)="5" OR d$(l)="7" OR d$(l)="9" THEN GO TO 110
90 GO SUB 240
100 GO TO 120
110 GO SUB 410
120 PRINT d$
130 IF d$<>"1" THEN GO TO 60
140 STOP
150 REM ===============================
160 REM Check
170 LET checked=1
180 LET l=LEN (d$)
190 FOR i=1 TO l
200 LET c= CODE (d$(i))-48
210 IF c<0 OR c>9 THEN LET checked=0
220 NEXT i
230 RETURN
240 REM ===============================
250 REM even
260 LET w$=""
270 LET carry=0
280 FOR i=1 TO l
290 LET c= CODE (d$(i))-48+carry
300 LET carry=0
310 LET m=c-10*INT (c/10)
320 IF m=0 OR m=2 OR m=4 OR m=6 OR m=8 THEN GO TO 350
330 LET carry=10
340 LET c=c-1
350 LET c=c/2
360 IF i>1 OR c>0 THEN LET w$=w$+CHR$ (c+48)
370 NEXT i
380 LET d$=w$
390 RETURN
400 REM ===============================
410 REM odd
420 LET carry=0
430 LET w$=""
440 FOR i=l TO 1 STEP -1
450 LET c=3*( CODE (d$(i))-48)+carry
460 IF (i=l) THEN LET c=c+1
470 LET m=c-10*INT (c/10)
480 LET w$=CHR$ (m+48)+w$
490 LET carry=INT (c/10)
500 NEXT i
510 IF carry=0 THEN GO TO 570
520 REM while(carry)
530 LET m=carry-10*INT (carry/10)
540 LET w$=CHR$ (m+48)+w$
550 LET carry=INT (carry/10)
560 IF carry>0 THEN GO TO 530
570 LET d$=w$
580 RETURN
=== 8< ==================================================
--
Jan van den Broek
balglaas@xs4all.nl
Entertaining Quakers since 2005
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)