day8: annotate
parent
1efcf6b597
commit
38ab065eaa
@ -0,0 +1,127 @@
|
||||
REM Advent of Code 2022: Day 8, part 1 and 2
|
||||
REM Written in Applesoft BASIC
|
||||
|
||||
REM Store the map as an array of strings.
|
||||
|
||||
10 SZ = 40
|
||||
20 DIM MP$(SZ)
|
||||
30 VI = 0
|
||||
40 SC = 0:SX = 2:SY = 1
|
||||
|
||||
60 GR
|
||||
70 PRINT "LEARNING ABOUT TREES";
|
||||
80 SPEED= 60: PRINT "...";: SPEED= 255
|
||||
|
||||
100 PRINT CHR$ (4),"open input"
|
||||
110 PRINT CHR$ (4),"read input"
|
||||
|
||||
REM Read all lines of the input file, adding them into the MP$ array.
|
||||
|
||||
120 I = 0
|
||||
140 S$ = ""
|
||||
150 GET C$
|
||||
160 IF ASC (C$) > 31 THEN S$ = S$ + C$: GOTO 150
|
||||
170 MP$(I) = S$
|
||||
180 I = I + 1
|
||||
185 IF I = SZ GOTO 200
|
||||
190 GOTO 140
|
||||
|
||||
REM Close the file once we've finished reading.
|
||||
REM Initialize the visible count to include border trees.
|
||||
|
||||
200 PRINT CHR$ (4),"close"
|
||||
210 VI = 2 * LEN (MP$(0)) - 4 + 2 * SZ
|
||||
220 HTAB 1
|
||||
230 PRINT "PLOTTING... "
|
||||
|
||||
REM Main loop: Iterate through all possibly-hidden and/or scenic trees.
|
||||
REM GOSUB 3000 is a (test) graphical routine to draw the tree.
|
||||
REM GOSUB 1000 checks hidden-ness of the tree, possibly incrementing the
|
||||
REM visibility count. If not visible, the tree is colored dark green.
|
||||
REM GOSUB 2000 calculates the scenic score for the tree. If a new more
|
||||
REM scenic spot is found, it is colored pink.
|
||||
|
||||
300 FOR Y = 1 TO SZ - 2
|
||||
310 S$ = MP$(Y)
|
||||
320 FOR X = 2 TO LEN (S$) - 1
|
||||
325 GOSUB 3000
|
||||
328 OV = VI
|
||||
330 GOSUB 1000
|
||||
332 IF OV = VI THEN COLOR= 4: GOSUB 3100
|
||||
335 GOSUB 2000
|
||||
340 NEXT X
|
||||
360 NEXT Y
|
||||
370 PRINT "VISIBLE TREES: ";VI
|
||||
375 PRINT "BEST VIEW SCORE: ";SC
|
||||
380 END
|
||||
|
||||
REM Check hidden-ness of tree at X, Y. Current map row is in S$.
|
||||
REM In order, checks to the west, east, north, and south.
|
||||
REM If visible, increments the total counter and exits.
|
||||
|
||||
1000 V$ = "0"
|
||||
1010 FOR I = 1 TO X - 1
|
||||
1020 C$ = MID$ (S$,I,1)
|
||||
1040 IF V$ < C$ THEN V$ = C$
|
||||
1050 NEXT I
|
||||
1060 IF V$ < MID$ (S$,X,1) THEN VI = VI + 1: RETURN
|
||||
1100 V$ = "0"
|
||||
1110 FOR I = LEN (S$) TO X + 1 STEP - 1
|
||||
1120 C$ = MID$ (S$,I,1)
|
||||
1130 IF V$ < C$ THEN V$ = C$
|
||||
1140 NEXT I
|
||||
1150 IF V$ < MID$ (S$,X,1) THEN VI = VI + 1: RETURN
|
||||
1200 V$ = "0"
|
||||
1210 FOR I = 0 TO Y - 1
|
||||
1220 C$ = MID$ (MP$(I),X,1)
|
||||
1230 IF V$ < C$ THEN V$ = C$
|
||||
1240 NEXT I
|
||||
1250 IF V$ < MID$ (S$,X,1) THEN VI = VI + 1: RETURN
|
||||
1300 V$ = "0"
|
||||
1310 FOR I = SZ - 1 TO Y + 1 STEP - 1
|
||||
1320 C$ = MID$ (MP$(I),X,1)
|
||||
1330 IF V$ < C$ THEN V$ = C$
|
||||
1340 NEXT I
|
||||
1350 IF V$ < MID$ (S$,X,1) THEN VI = VI + 1
|
||||
1360 RETURN
|
||||
|
||||
REM Score scenery for the given tree, same parameters as 1000.
|
||||
REM Does linear checks to the west, east, north, and south, in that order.
|
||||
|
||||
2000 C$ = MID$ (S$,X,1)
|
||||
2010 N = 0:S = 0:E = 0:W = 0
|
||||
2020 FOR I = X - 1 TO 1 STEP - 1
|
||||
2030 W = W + 1
|
||||
2040 IF C$ < = MID$ (MP$(Y),I,1) THEN I = 1
|
||||
2050 NEXT I
|
||||
2100 FOR I = X + 1 TO LEN (S$)
|
||||
2110 E = E + 1
|
||||
2120 IF C$ < = MID$ (MP$(Y),I,1) THEN I = LEN (S$)
|
||||
2130 NEXT I
|
||||
2200 FOR I = Y - 1 TO 0 STEP - 1
|
||||
2210 N = N + 1
|
||||
2220 IF C$ < = MID$ (MP$(I),X,1) THEN I = 0
|
||||
2230 NEXT I
|
||||
2300 FOR I = Y + 1 TO SZ - 1
|
||||
2310 S = S + 1
|
||||
2320 IF C$ < = MID$ (MP$(I),X,1) THEN I = SZ - 1
|
||||
2330 NEXT I
|
||||
2400 R = N * S * E * W
|
||||
2405 IF R < = SC GOTO 2450
|
||||
2410 A = X:B = Y
|
||||
2415 X = SX:Y = SY
|
||||
2420 GOSUB 3000
|
||||
2425 SC = R:SX = A:SY = B
|
||||
2430 X = A:Y = B
|
||||
2435 COLOR= 11: GOSUB 3100
|
||||
2450 RETURN
|
||||
|
||||
REM Plots the current tree on the screen. Lighter green for taller trees.
|
||||
REM Visible trees are drawn dark green, see 332.
|
||||
|
||||
3000 C$ = MID$ (S$,X,1)
|
||||
3010 IF C$ < "4" THEN COLOR= 12: GOTO 3100
|
||||
3020 COLOR= 14
|
||||
3100 PLOT X - 2,Y - 1
|
||||
3110 RETURN
|
||||
|
Loading…
Reference in New Issue