From 6ba216c726b85ce6124b447e5a6cbcae37c2f1a7 Mon Sep 17 00:00:00 2001 From: "Mikael O. Bonnier" Date: Sat, 29 Jan 2022 19:35:03 +0100 Subject: [PATCH] Add Aritm game (#42) * Create sample.aritm.txt * Update index.html * Added "01", ",1", and ".1" as alternatives to "-1" * Updated year to 2022 * Initialze text mode & fix possible roundoff error * Switched subroutines to functions & improved seed --- index.html | 1 + samples/sample.aritm.txt | 298 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 299 insertions(+) create mode 100644 samples/sample.aritm.txt diff --git a/index.html b/index.html index 7a2b04d..d1e8dde 100644 --- a/index.html +++ b/index.html @@ -78,6 +78,7 @@ By Joshua Bell + diff --git a/samples/sample.aritm.txt b/samples/sample.aritm.txt new file mode 100644 index 0000000..d51eeca --- /dev/null +++ b/samples/sample.aritm.txt @@ -0,0 +1,298 @@ +1000 REM ARITM V0.3.4 FOR APPLESOFT BASIC IN JAVASCRIPT IS FOSS. +1020 REM (C) 1992-2022 BY MIKAEL O. BONNIER, LUND, SWEDEN. +1030 REM E-MAIL: . +1040 REM ABSOLUTELY NO WARRANTY. +1050 REM LICENSE GPLV3+, SEE +1060 REM . +1070 REM MORE PROGRAMS AT +1080 REM . ~ IS TILDE. +1090 REM DOCUMENTATION: +1100 REM 876543210, 8:TYPE, 7-5:OP1, 4-3:OP2, 2:RES'D, 1-0:#TODO. +1110 REM PROGRAM: +1112 GOTO 1115 +1113 STOP +1114 STOP +1115 LET R=RND(-PEEK(78)-PEEK(79)*256) +1116 TEXT:PR#3:PRINT CHR$(17);CHR$(12); +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 +1130 GOSUB 3410:REM CLS +1140 LET A=0 +1150 IF L>0 AND M GOTO 3000:REM CONTMENU +1160 IF 0=M THEN LET M=10 +1170 GOTO 3030:REM MENU +1180 REM LBL S +1190 GOSUB 3410:REM CLS +1200 PRINT "GENERATING" +1210 PRINT "PROBLEMS..." +1220 LET U=1 +1230 REM DIM A(N) +1240 REM LBL ADD1 +1250 X=M:Y=10:X=FN DIV(Y) +1255 IF 0=FN MD(Y) GOTO 1320:REM ADD2 +1260 FOR I=0 TO 9 +1270 FOR J=0 TO 9 +1280 LET A(U)=100000000+I*100000+J*1000+1 +1290 LET U=U+1 +1300 NEXT J +1310 NEXT I +1320 REM LBL ADD2 +1330 X=M:X=FN DIV(100) +1335 IF 0=FN MD(10) GOTO 1410:REM SUB1 +1340 FOR I=0 TO 9 +1350 FOR J=0 TO 9 +1360 LET T=10*(INT(8*RND(1))+1) +1370 LET A(U)=200000000+(T+I)*100000+J*1000+1 +1380 LET U=U+1 +1390 NEXT J +1400 NEXT I +1410 REM LBL SUB1 +1420 X=M:X=FN DIV(1000) +1425 IF 0=FN MD(10) GOTO 1490:REM SUB2 +1430 FOR I=0 TO 9 +1440 FOR J=I TO 9+I +1450 LET A(U)=300000000+J*100000+I*1000+1 +1460 LET U=U+1 +1470 NEXT J +1480 NEXT I +1490 REM LBL SUB2 +1500 X=M:X=FN DIV(10000) +1505 IF 0=FN MD(10) GOTO 1580:REM MUL +1510 FOR I=0 TO 9 +1520 FOR J=I TO 9+I +1530 LET T=10*(INT(9*RND(1))+1) +1540 LET A(U)=400000000+(T+J)*100000+I*1000+1 +1550 LET U=U+1 +1560 NEXT J +1570 NEXT I +1580 REM LBL MUL +1590 X=M:X=FN DIV(100000) +1595 IF 0=FN MD(10) GOTO 1660:REM DIV +1600 FOR I=0 TO 9 +1610 FOR J=0 TO 9 +1620 LET A(U)=500000000+I*100000+J*1000+1 +1630 LET U=U+1 +1640 NEXT J +1650 NEXT I +1660 REM LBL DIV +1670 X=M:X=FN DIV(1000000) +1675 IF 0=FN MD(10) GOTO 1750:REM ENDIF +1680 FOR I=0 TO 9 +1690 FOR J=1 TO 9 +1700 LET T=I*J+INT(J*RND(1)) +1710 LET A(U)=600000000+T*100000+J*1000+1 +1720 LET U=U+1 +1730 NEXT J +1740 NEXT I +1750 REM LBL ENDIF +1760 LET U=U-1 +1770 LET L=U +1780 REM LBL U +1790 PRINT "SHUFFLING..." +1800 FOR I=U TO 2 STEP -1 +1810 LET J=INT(I*RND(1))+1 +1820 LET TF=A(I) +1830 LET A(I)=A(J) +1840 LET A(J)=TF +1850 NEXT I +1860 LET K=1 +1870 REM LBL K +1880 GOSUB 3410:REM CLS +1890 PRINT MID$(STR$(L),1); +1895 PRINT " PROBLEMS LEFT. -1 ESC" +1900 LET TF=A(K) +1910 X=TF +1915 LET C=FN DIV(100000000) +1920 IF 6=C THEN PRINT "INTEGER PART OF "; +1930 X=TF:X=FN DIV(100000) +1935 LET I=FN MD(1000) +1940 PRINT MID$(STR$(I),1); +1950 GOSUB 3280:REM SIGN +1960 X=TF:X=FN DIV(1000) +1965 LET J=FN MD(100) +1970 PRINT MID$(STR$(J),1); +1980 PRINT " = ";:INPUT "";A$:A=VAL(A$) +1985 PRINT +1990 IF -1=A OR ".1"=A$ OR ",1"=A$ OR "01"=A$ GOTO 1120:REM C +2000 IF 1=C OR 2=C THEN LET R=I+J:GOTO 2040:REM ENDIF +2010 IF 3=C OR 4=C THEN LET R=I-J:GOTO 2040:REM ENDIF +2020 IF 5=C THEN LET R=I*J:GOTO 2040:REM ENDIF +2030 IF 6=C THEN LET R=INT(I/J):REM ENDIF +2040 REM LBL ENDIF +2050 IF ABS(R-A)>1E-6 GOTO 2140:REM WRONG +2060 PRINT "RIGHT! "; +2070 X=TF +2075 IF 0>=FN MD(100) GOTO 2100:REM ENDIF +2080 LET L=L-1 +2090 LET A(K)=TF-1 +2100 REM LBL ENDIF +2110 LET K=K+1 +2120 IF 0=L GOTO 2390:REM W +2280 PRINT "CHECKING..." +2290 LET N=1 +2300 FOR K=1 TO U +2310 LET TF=A(K) +2320 X=TF +2325 IF 0=FN MD(100) GOTO 2350:REM ENDIF +2330 LET A(N)=TF +2340 LET N=N+1 +2350 REM ENDIF +2360 NEXT K +2370 LET U=N-1 +2380 GOTO 1780:REM U +2390 REM LBL W +2400 PRINT "GOOD!!! WELL DONE!" +2410 LET D=5000:GOSUB 3402:REM DELAY +2420 GOTO 1120:REM C +2430 REM LBL E +2440 GOSUB 3410:REM CLS +2450 LET A=0 +2460 LET N=0 +2470 LET TF=M +2480 GOSUB 2640:REM SUB +2490 PRINT "ADDITION 1" +2500 GOSUB 2640:REM SUB +2510 PRINT "ADDITION 2" +2520 GOSUB 2640:REM SUB +2530 PRINT "SUBTRACTION 1" +2540 GOSUB 2640:REM SUB +2550 PRINT "SUBTRACTION 2" +2560 GOSUB 2640:REM SUB +2570 PRINT "MULTIPLICATION" +2580 GOSUB 2640:REM SUB +2590 PRINT "DIVISION | -1 ESC" +2600 PRINT "0 OK AND GO "; +2605 PRINT STR$(N) +2610 GOTO 2780:REM INPUT +2640 REM SUB +2650 LET A=A+1 +2660 X=TF +2665 LET TF=FN DIV(10) +2670 PRINT MID$(STR$(A),1); +2680 X=TF +2685 IF 0=FN MD(10) GOTO 2720:REM ELSE +2690 PRINT "*"; +2700 LET N=N+100-10*(6=A) +2710 GOTO 2740:REM ENDIF +2720 REM LBL ELSE +2730 PRINT " "; +2740 REM LBL ENDIF +2750 RETURN +2780 REM LBL INPUT +2790 PRINT "TOGGLE ITEM 1-6, OR CHOOSE 0 OR -1: ";:INPUT "";A$:A=VAL(A$) +2800 IF -1>A OR 60)),1); +3134 PRINT ": "; +3140 INPUT "";A$:S=VAL(A$) +3145 PRINT +3150 IF 1>S OR 4+(L>0)0 +3360 LET R=1 +3370 FOR I=1 TO A +3380 LET R=R*10 +3390 NEXT I +3400 RETURN +3402 REM DELAY +3404 LET T1=0 +3405 LET D=D*3:REM 60*D/1000 +3406 T1=T1+1:IF T1." +3520 LET D=5000:GOSUB 3402:REM DELAY +3530 RETURN +3540 REM SUB ABOUT +3550 GOSUB 3410:REM CLS +3560 PRINT "ABOUT" +3570 PRINT "ARITM 0.3 (C) 1992-2022 BY" +3575 PRINT "MIKAEL O. BONNIER, LUND, SWEDEN." +3580 PRINT "ABSOLUTELY NO WARRANTY." +3585 PRINT "FOSS, SEE LICENSE GPLV3+." +3590 LET D=5000:GOSUB 3402:REM DELAY +3600 RETURN +3610 REM SUB SOUND +3665 PRINT CHR$(7);CHR$(7); +3670 FOR X=1 TO 250:NEXT +3690 RETURN