REM Advent of Code 2022: Day 9, part 1 REM Written in Applesoft BASIC REM Same as part1, but track positions in SX and SY arrays. REM At 405, we reuse HX/HY/TX/TY to minimize changes from part1. REM Also added simple graphics, see 305/400, 412/438, and 458... REM Head, body, and tail are different colors. 10 DIM HS(7000) 20 DIM SX(10) 30 DIM SY(10) 40 FOR I = 0 TO 9:SX(I) = 0: NEXT I 50 FOR I = 0 TO 9:SY(I) = 0: NEXT I 60 GR 70 COLOR= 9: PLOT 19,19 100 S$ = "" 110 GET C$ 120 IF ASC (C$) < 32 GOTO 200 130 S$ = S$ + C$ 140 GOTO 110 200 IF LEN (S$) = 0 THEN GOTO 1000 210 D$ = LEFT$ (S$,1) 220 S = VAL ( MID$ (S$,3, LEN (S$) - 2)) 230 PRINT ">>",D$;" ";S 300 FOR I = 1 TO S 305 COLOR= 0: PLOT 19 - SX(0),19 - SY(0) 310 IF D$ = "U" THEN SY(0) = SY(0) + 1: GOTO 400 320 IF D$ = "D" THEN SY(0) = SY(0) - 1: GOTO 400 330 IF D$ = "R" THEN SX(0) = SX(0) + 1: GOTO 400 340 IF D$ = "L" THEN SX(0) = SX(0) - 1: GOTO 400 350 PRINT "ERROR: ";D$ 360 END 400 COLOR= 1: PLOT 19 - SX(0),19 - SY(0) 402 FOR K = 1 TO 9 405 HX = SX(K - 1):HY = SY(K - 1) 410 TX = SX(K):TY = SY(K) 412 COLOR= 0: PLOT 19 - TX,19 - TY 415 DX = HX - TX:DY = HY - TY 420 IF ABS (DX) < = 1 AND ABS (DY) < = 1 GOTO 438 430 IF HX < > TX THEN GOSUB 500 435 IF HY < > TY THEN GOSUB 550 438 COLOR= 9: PLOT 19 - TX,19 - TY 440 SX(K) = TX:SY(K) = TY 445 NEXT K 450 HH = TX * 1000 + TY 455 GOSUB 600 458 COLOR= 12: PLOT 19 - TX,19 - TY 460 NEXT I 470 GOTO 100 500 Z = - 1 510 IF HX > TX THEN Z = 1 520 TX = TX + Z 530 RETURN 550 Z = - 1 560 IF HY > TY THEN Z = 1 570 TY = TY + Z 580 RETURN 600 FOR J = 0 TO 6999 610 IF HS(J) = HH THEN J = 6999: GOTO 630 620 IF HS(J) = 0 THEN HS(J) = HH:J = 9999 630 NEXT J 640 RETURN 1000 CO = 0 1010 FOR I = 0 TO 9999 1020 CO = CO + 1 1030 IF HS(I) = 0 THEN I = 9999 1040 NEXT I 1050 PRINT "TOTAL: ";CO 1060 END ]PR#0