thomas_2023/day_6/part2.bas
Quantum fce178d777 Part 1 ez, part 2 was pain but theoretically works on a C64
Part 2 takes about 2 seconds per iteration and needs to
do 46857582 iterations.

From what ive tested everything else works and the C64 is
capable of decrementing 46857582 so the loop should finish
successfully... eventually...
2024-06-20 23:32:52 -04:00

73 lines
1.4 KiB
QBasic

0 DIM WD(20)
1 DIM NA(20)
2 DIM NB(20)
3 DIM PR(20)
100 INPUT "TIME"; TM
110 INPUT "DIST"; DI$
111 DW = LEN(DI$)
112 FOR I=1 TO DW: WD(DW-I)=ASC(MID$(DI$,I,1))-48 :NEXT
199 WI = 0
200 FOR X = 0 TO TM
201 IF X MOD 100000 = 0 THEN PRINT X
210 N = TM - X
211 GOSUB 2000
212 FOR J=0 TO D: NA(J)=NS(J) :NEXT
213 DA = D
214 N = X
215 GOSUB 2000
216 FOR J=0 TO D: NB(J)=NS(J) :NEXT
217 DB = D
218 GOSUB 3000
219 GOSUB 3500
220 IF G > 0 THEN WINS = WINS + 1
300 NEXT X
310 PRINT WINS
320 END
2000 REM INT TO BASE10 STREAM
2010 D=0
2020 A = N
2021 B = 10
2022 GOSUB 2500
2023 NS(D) = M
2030 N = INT(N / 10)
2040 D = D + 1
2050 IF N > 0 THEN GOTO 2020
2060 RETURN
2499 REM
2500 REM MODULO
2501 REM
2510 M = A - INT(A / B) * B
2520 RETURN
3000 FOR I=0 TO DB
3010 FOR J=0 TO DA
3020 PR(I + J) = PR(I + J) + (NA(J) * NB(I))
3030 NEXT J
3040 NEXT I
3050 REM FIXING TIME
3060 FOR I=0 TO (DA+DB)
3070 TP = INT(PR(I) / 10)
3080 A = PR(I)
3081 B = 10
3082 GOSUB 2500
3083 PR(I) = M
3090 PR(I + 1) = PR(I + 1) + TP
3100 NEXT I
3110 IF PR(I) > 0 THEN GOTO 3140
3120 I = I - 1
3130 GOTO 3110
3140 DP = I
3150 RETURN
3500 IF DP > DW THEN GOTO 3540
3501 FOR I=DP TO 0 STEP -1
3510 IF PR(I) > WD(I) THEN GOTO 3540
3511 IF PR(I) < WD(I) THEN GOTO 3530
3520 NEXT I
3530 G = 0
3531 RETURN
3540 G = 1
3541 RETURN