Switched subroutines to functions & improved seed

This commit is contained in:
Mikael O. Bonnier 2022-01-17 03:07:35 +01:00 committed by GitHub
parent 92080780bb
commit 1e76f3ea62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,11 +10,13 @@
1100 REM 876543210, 8:TYPE, 7-5:OP1, 4-3:OP2, 2:RES'D, 1-0:#TODO. 1100 REM 876543210, 8:TYPE, 7-5:OP1, 4-3:OP2, 2:RES'D, 1-0:#TODO.
1110 REM PROGRAM: 1110 REM PROGRAM:
1112 GOTO 1115 1112 GOTO 1115
1113 MD=INT((X/Y-INT(X/Y))*Y+.5):RETURN 1113 STOP
1114 DIV=INT(X/Y+.5):RETURN 1114 STOP
1115 LET R=RND(-1) 1115 LET R=RND(-PEEK(78)-PEEK(79)*256)
1116 TEXT:PR#3:PRINT CHR$(17);CHR$(12); 1116 TEXT:PR#3:PRINT CHR$(17);CHR$(12);
1117 DIM A(590) 1117 DIM A(590)
1118 DEF FN MD(Y)=INT((X/Y-INT(X/Y))*Y+.5)
1119 DEF FN DIV(Y)=INT(X/Y+.5)
1120 REM LBL C 1120 REM LBL C
1130 GOSUB 3410:REM CLS 1130 GOSUB 3410:REM CLS
1140 LET A=0 1140 LET A=0
@ -28,8 +30,8 @@
1220 LET U=1 1220 LET U=1
1230 REM DIM A(N) 1230 REM DIM A(N)
1240 REM LBL ADD1 1240 REM LBL ADD1
1250 X=M:Y=10:GOSUB 1114:X=DIV:GOSUB 1113 1250 X=M:Y=10:X=FN DIV(Y)
1255 IF 0=MD GOTO 1320:REM ADD2 1255 IF 0=FN MD(Y) GOTO 1320:REM ADD2
1260 FOR I=0 TO 9 1260 FOR I=0 TO 9
1270 FOR J=0 TO 9 1270 FOR J=0 TO 9
1280 LET A(U)=100000000+I*100000+J*1000+1 1280 LET A(U)=100000000+I*100000+J*1000+1
@ -37,8 +39,8 @@
1300 NEXT J 1300 NEXT J
1310 NEXT I 1310 NEXT I
1320 REM LBL ADD2 1320 REM LBL ADD2
1330 X=M:Y=100:GOSUB 1114:X=DIV:Y=10:GOSUB 1113 1330 X=M:X=FN DIV(100)
1335 IF 0=MD GOTO 1410:REM SUB1 1335 IF 0=FN MD(10) GOTO 1410:REM SUB1
1340 FOR I=0 TO 9 1340 FOR I=0 TO 9
1350 FOR J=0 TO 9 1350 FOR J=0 TO 9
1360 LET T=10*(INT(8*RND(1))+1) 1360 LET T=10*(INT(8*RND(1))+1)
@ -47,8 +49,8 @@
1390 NEXT J 1390 NEXT J
1400 NEXT I 1400 NEXT I
1410 REM LBL SUB1 1410 REM LBL SUB1
1420 X=M:Y=1000:GOSUB 1114:X=DIV:Y=10:GOSUB 1113 1420 X=M:X=FN DIV(1000)
1425 IF 0=MD GOTO 1490:REM SUB2 1425 IF 0=FN MD(10) GOTO 1490:REM SUB2
1430 FOR I=0 TO 9 1430 FOR I=0 TO 9
1440 FOR J=I TO 9+I 1440 FOR J=I TO 9+I
1450 LET A(U)=300000000+J*100000+I*1000+1 1450 LET A(U)=300000000+J*100000+I*1000+1
@ -56,8 +58,8 @@
1470 NEXT J 1470 NEXT J
1480 NEXT I 1480 NEXT I
1490 REM LBL SUB2 1490 REM LBL SUB2
1500 X=M:Y=10000:GOSUB 1114:X=DIV:Y=10:GOSUB 1113 1500 X=M:X=FN DIV(10000)
1505 IF 0=MD GOTO 1580:REM MUL 1505 IF 0=FN MD(10) GOTO 1580:REM MUL
1510 FOR I=0 TO 9 1510 FOR I=0 TO 9
1520 FOR J=I TO 9+I 1520 FOR J=I TO 9+I
1530 LET T=10*(INT(9*RND(1))+1) 1530 LET T=10*(INT(9*RND(1))+1)
@ -66,8 +68,8 @@
1560 NEXT J 1560 NEXT J
1570 NEXT I 1570 NEXT I
1580 REM LBL MUL 1580 REM LBL MUL
1590 X=M:Y=100000:GOSUB 1114:X=DIV:Y=10:GOSUB 1113 1590 X=M:X=FN DIV(100000)
1595 IF 0=MD GOTO 1660:REM DIV 1595 IF 0=FN MD(10) GOTO 1660:REM DIV
1600 FOR I=0 TO 9 1600 FOR I=0 TO 9
1610 FOR J=0 TO 9 1610 FOR J=0 TO 9
1620 LET A(U)=500000000+I*100000+J*1000+1 1620 LET A(U)=500000000+I*100000+J*1000+1
@ -75,8 +77,8 @@
1640 NEXT J 1640 NEXT J
1650 NEXT I 1650 NEXT I
1660 REM LBL DIV 1660 REM LBL DIV
1670 X=M:Y=1000000:GOSUB 1114:X=DIV:Y=10:GOSUB 1113 1670 X=M:X=FN DIV(1000000)
1675 IF 0=MD GOTO 1750:REM ENDIF 1675 IF 0=FN MD(10) GOTO 1750:REM ENDIF
1680 FOR I=0 TO 9 1680 FOR I=0 TO 9
1690 FOR J=1 TO 9 1690 FOR J=1 TO 9
1700 LET T=I*J+INT(J*RND(1)) 1700 LET T=I*J+INT(J*RND(1))
@ -101,15 +103,15 @@
1890 PRINT MID$(STR$(L),1); 1890 PRINT MID$(STR$(L),1);
1895 PRINT " PROBLEMS LEFT. -1 ESC" 1895 PRINT " PROBLEMS LEFT. -1 ESC"
1900 LET TF=A(K) 1900 LET TF=A(K)
1910 X=TF:Y=100000000:GOSUB 1114 1910 X=TF
1915 LET C=DIV 1915 LET C=FN DIV(100000000)
1920 IF 6=C THEN PRINT "INTEGER PART OF "; 1920 IF 6=C THEN PRINT "INTEGER PART OF ";
1930 X=TF:Y=100000:GOSUB 1114:X=DIV:Y=1000:GOSUB 1113 1930 X=TF:X=FN DIV(100000)
1935 LET I=MD 1935 LET I=FN MD(1000)
1940 PRINT MID$(STR$(I),1); 1940 PRINT MID$(STR$(I),1);
1950 GOSUB 3280:REM SIGN 1950 GOSUB 3280:REM SIGN
1960 X=TF:Y=1000:GOSUB 1114:X=DIV:Y=100:GOSUB 1113 1960 X=TF:X=FN DIV(1000)
1965 LET J=MD 1965 LET J=FN MD(100)
1970 PRINT MID$(STR$(J),1); 1970 PRINT MID$(STR$(J),1);
1980 PRINT " = ";:INPUT "";A$:A=VAL(A$) 1980 PRINT " = ";:INPUT "";A$:A=VAL(A$)
1985 PRINT 1985 PRINT
@ -121,8 +123,8 @@
2040 REM LBL ENDIF 2040 REM LBL ENDIF
2050 IF ABS(R-A)>1E-6 GOTO 2140:REM WRONG 2050 IF ABS(R-A)>1E-6 GOTO 2140:REM WRONG
2060 PRINT "RIGHT! "; 2060 PRINT "RIGHT! ";
2070 X=TF:Y=100:GOSUB 1113 2070 X=TF
2075 IF 0>=MD GOTO 2100:REM ENDIF 2075 IF 0>=FN MD(100) GOTO 2100:REM ENDIF
2080 LET L=L-1 2080 LET L=L-1
2090 LET A(K)=TF-1 2090 LET A(K)=TF-1
2100 REM LBL ENDIF 2100 REM LBL ENDIF
@ -137,8 +139,8 @@
2182 PRINT " IS "; 2182 PRINT " IS ";
2184 PRINT STR$(R); 2184 PRINT STR$(R);
2186 PRINT "." 2186 PRINT "."
2190 X=TF:Y=100:GOSUB 1113 2190 X=TF
2195 IF 99<=MD GOTO 2220:REM ENDIF 2195 IF 99<=FN MD(100) GOTO 2220:REM ENDIF
2200 LET L=L+1 2200 LET L=L+1
2210 LET A(K)=TF+1 2210 LET A(K)=TF+1
2220 REM LBL ENDIF 2220 REM LBL ENDIF
@ -152,8 +154,8 @@
2290 LET N=1 2290 LET N=1
2300 FOR K=1 TO U 2300 FOR K=1 TO U
2310 LET TF=A(K) 2310 LET TF=A(K)
2320 X=TF:Y=100:GOSUB 1113 2320 X=TF
2325 IF 0=MD GOTO 2350:REM ENDIF 2325 IF 0=FN MD(100) GOTO 2350:REM ENDIF
2330 LET A(N)=TF 2330 LET A(N)=TF
2340 LET N=N+1 2340 LET N=N+1
2350 REM ENDIF 2350 REM ENDIF
@ -186,11 +188,11 @@
2610 GOTO 2780:REM INPUT 2610 GOTO 2780:REM INPUT
2640 REM SUB 2640 REM SUB
2650 LET A=A+1 2650 LET A=A+1
2660 X=TF:Y=10:GOSUB 1114 2660 X=TF
2665 LET TF=DIV 2665 LET TF=FN DIV(10)
2670 PRINT MID$(STR$(A),1); 2670 PRINT MID$(STR$(A),1);
2680 X=TF:Y=10:GOSUB 1113 2680 X=TF
2685 IF 0=MD GOTO 2720:REM ELSE 2685 IF 0=FN MD(10) GOTO 2720:REM ELSE
2690 PRINT "*"; 2690 PRINT "*";
2700 LET N=N+100-10*(6=A) 2700 LET N=N+100-10*(6=A)
2710 GOTO 2740:REM ENDIF 2710 GOTO 2740:REM ENDIF
@ -204,9 +206,9 @@
2810 IF 0=A GOTO 1180:REM S 2810 IF 0=A GOTO 1180:REM S
2820 IF -1=A OR ".1"=A$ OR ",1"=A$ OR "01"=A$ GOTO 1120:REM C 2820 IF -1=A OR ".1"=A$ OR ",1"=A$ OR "01"=A$ GOTO 1120:REM C
2830 GOSUB 3350:REM POW10 2830 GOSUB 3350:REM POW10
2840 X=M:Y=R:GOSUB 1114:REM IDIV 2840 X=M
2842 X=DIV:Y=10:GOSUB 1113:REM MOD 2842 X=FN DIV(R)
2845 IF 0=MD GOTO 2870:REM ELSE 2845 IF 0=FN MD(10) GOTO 2870:REM ELSE
2850 LET M=M-R 2850 LET M=M-R
2860 GOTO 2890:REM ENDIF 2860 GOTO 2890:REM ENDIF
2870 REM LBL ELSE 2870 REM LBL ELSE