aboutsummaryrefslogtreecommitdiffstats
path: root/day9/part2.bas
blob: d82eecfc61e0b7f93d68d967a657f24a0df40cbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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