You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
2.5 KiB
QBasic

REM Advent of Code 2022: Day 11 part 1
REM Written in Applesoft BASIC
10 DIM MK(10,25)
20 DIM MS(10)
30 DIM IC(10)
40 MI = - 1
50 M$ = ""
70 PRINT CHR$ (4),"OPEN INPUT"
80 PRINT CHR$ (4),"READ INPUT"
90 ONERR GOTO 900
100 S$ = ""
110 GET C$
120 IF C$ < " " GOTO 200
130 S$ = S$ + C$
140 GOTO 110
200 IF LEN (S$) = 0 GOTO 300
205 PRINT S$
210 IF LEFT$ (S$,6) = "Monkey" GOTO 400
220 IF LEFT$ (S$,4) = " St" GOTO 500
230 IF LEFT$ (S$,4) = " Op" GOTO 700
235 Z = 0
240 FOR I = 1 TO LEN (S$)
245 C$ = MID$ (S$,I,1)
250 IF C$ > = "0" AND C$ < = "9" THEN Z = I:I = LEN (S$)
260 NEXT I
270 V = VAL ( MID$ (S$,Z, LEN (S$) - Z + 1))
280 M$ = CHR$ (V) + M$
290 GOTO 100
300 FOR I = 1 TO LEN (M$)
310 MK(MI,I - 1) = ASC ( MID$ (M$,I,1))
320 NEXT I
330 MS(MI) = LEN (M$) - 1
340 M$ = ""
350 GOTO 100
400 MI = MI + 1
410 GOTO 100
500 S$ = MID$ (S$,2, LEN (S$) - 1)
510 IF LEN (S$) = 0 GOTO 100
520 IF LEFT$ (S$,1) > = "0" AND LEFT$ (S$,1) < = "9" GOTO 540
530 GOTO 500
540 V = VAL (S$)
550 M$ = M$ + CHR$ (V)
570 S$ = MID$ (S$,2, LEN (S$) - 1)
580 IF LEN (S$) = 0 GOTO 100
590 IF LEFT$ (S$,1) < "0" OR LEFT$ (S$,1) > "9" GOTO 500
600 GOTO 570
700 S$ = MID$ (S$,2, LEN (S$) - 1)
710 IF LEN (S$) = 0 GOTO 100
720 IF LEFT$ (S$,1) = "=" GOTO 740
730 GOTO 700
740 O$ = MID$ (S$,7,1)
750 IF MID$ (S$,9,1) = "o" THEN V = 0: GOTO 770
760 V = VAL ( MID$ (S$,9, LEN (S$) - 8))
770 M$ = CHR$ (V) + O$ + M$
780 GOTO 100
900 PRINT CHR$ (4),"CLOSE"
910 POKE 216,0
920 CALL - 3288
925 GOTO 2000
930 SM = 1
940 FOR I = 0 TO MI
950 SM = SM * MK(I,2)
960 NEXT I
1000 FOR I = 0 TO MI
1005 PRINT MS(I);": ";
1010 FOR J = 0 TO MS(I)
1020 PRINT MK(I,J);" ";
1030 NEXT J
1040 PRINT
1050 NEXT I
2000 FOR R = 1 TO 20
2005 PRINT "TURN ";R;"..."
2010 FOR I = 0 TO MI
2018 IF MS(I) < 5 GOTO 2160
2020 FOR J = 5 TO MS(I)
2030 W = MK(I,J)
2040 O = MK(I,3)
2050 IF O = 0 THEN O = W
2060 IF MK(I,4) = 42 THEN W = W * O
2070 IF MK(I,4) = 43 THEN W = W + O
2080 W = INT (W / 3)
2090 D = INT (W / MK(I,2))
2100 IF W = D * MK(I,2) THEN K = MK(I,1): GOTO 2120
2110 K = MK(I,0)
2120 MS(K) = MS(K) + 1
2130 MK(K,MS(K)) = W
2135 MK(I,J) = 0
2140 NEXT J
2150 IC(I) = IC(I) + MS(I) - 4
2160 MS(I) = 4
2170 NEXT I
2180 NEXT R
2200 FOR I = 0 TO MI
2210 PRINT "MONKEY ";I;" TOSSED ";IC(I);" TIMES."
2220 NEXT I
2230 END
2500 FOR I = 0 TO MI
2510 FOR J = 0 TO MS(I)
2520 PRINT MK(I,J);" ";
2530 NEXT J
2540 PRINT
2550 NEXT I
2560 RETURN