aboutsummaryrefslogtreecommitdiffstats
path: root/day9/part2.bas
diff options
context:
space:
mode:
Diffstat (limited to 'day9/part2.bas')
-rw-r--r--day9/part2.bas61
1 files changed, 61 insertions, 0 deletions
diff --git a/day9/part2.bas b/day9/part2.bas
new file mode 100644
index 0000000..917c83a
--- /dev/null
+++ b/day9/part2.bas
@@ -0,0 +1,61 @@
+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.
+
+ 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
+ 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
+ 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 FOR K = 1 TO 9
+ 405 HX = SX(K - 1):HY = SY(K - 1)
+ 410 TX = SX(K):TY = SY(K)
+ 415 DX = HX - TX:DY = HY - TY
+ 420 IF ABS (DX) < = 1 AND ABS (DY) < = 1 GOTO 460
+ 430 IF HX < > TX THEN GOSUB 500
+ 435 IF HY < > TY THEN GOSUB 550
+ 440 SX(K) = TX:SY(K) = TY
+ 445 NEXT K
+ 450 HH = TX * 1000 + TY
+ 455 GOSUB 600
+ 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
+