aboutsummaryrefslogtreecommitdiffstats
path: root/day7/both.bas
blob: efe35a8f8737011b3a9f4cd8f393a7a2206d6bc8 (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
REM Advent of Code 2022: Day 7, part 1 and 2
REM Written in Applesoft BASIC

 10  ONERR  GOTO 700
 20  PRINT  CHR$ (4),"OPEN INPUT"
 30  PRINT  CHR$ (4),"READ INPUT"
 40  HOME 
 50  SPEED= 170
 100  DIM DN$(200)
 110  DIM DS(200)
 120  FOR I = 0 TO 199:DN$(I) = "": NEXT I
 130  FOR I = 0 TO 199:DS(I) = 0: NEXT I
 140 W$ = "/"
 200  GOSUB 4000
 210  PRINT "$";
 215  FOR I = 0 TO 1000: NEXT I
 218  SPEED= 70: PRINT  RIGHT$ (S$, LEN (S$) - 1): SPEED= 170
 220  IF  LEFT$ (S$,4) = "$ cd" GOTO 300
 230  GOTO 500
 300 C$ =  MID$ (S$,6,1)
 305  IF  ASC (C$) = 47 THEN W$ = ""
 310  IF  ASC (C$) = 46 GOTO 350
 320 W$ = W$ +  MID$ (S$,6, LEN (S$) - 5)
 330  IF  ASC ( RIGHT$ (W$,1)) <  > 47 THEN W$ = W$ + "/"
 340  GOTO 400
 350 W$ =  LEFT$ (W$, LEN (W$) - 1)
 360  IF  RIGHT$ (W$,1) <  > "/" GOTO 350
 370  GOTO 200
 400 S$ = W$
 410  GOSUB 2000
 420  GOTO 200
 500 V = 0
 510  GOSUB 4000
 515  IF  LEFT$ (S$,1) = "$" GOTO 600
 520  PRINT S$
 530  IF  LEFT$ (S$,3) = "dir" GOTO 510
 540 V =  VAL (S$)
 550 S$ = W$
 560  GOSUB 3000
 570  GOTO 510
 600  GOTO 210
 700 T = 0
 710  FOR I = 0 TO 199
 720  IF  LEN (DN$(I)) = 0 THEN I = 199: GOTO 740
 730  IF DS(I) <  = 100000 THEN T = T + DS(I)
 740  NEXT I
 745  PRINT 
 750  PRINT "part 1: ";T;" bytes"
 760  GOTO 5000
 900  PRINT  CHR$ (4),"CLOSE"
 910  SPEED= 255
 920  END 
 1000 V = 0
 1010  FOR I = 0 TO 199
 1020  IF DN$(I) = S$ THEN V = DS(I):I = 199
 1030  NEXT I
 1040  RETURN 
 2000 V = 0
 2005  FOR I = 0 TO 199
 2010  IF DN$(I) = S$ THEN  PRINT "ERROR": END 
 2020  IF  LEN (DN$(I)) = 0 THEN DN$(I) = S$:DS(I) = V:I = 199
 2030  NEXT I
 2040  RETURN 
 3000  FOR I = 0 TO 199
 3010 L =  LEN (S$)
 3015 M =  LEN (DN$(I))
 3020  IF  LEN (DN$(I)) = 0 THEN I = 199: GOTO 3040
 3030  IF L >  = M AND  LEFT$ (S$,M) = DN$(I) GOTO 3060
 3040  NEXT I
 3050  RETURN 
 3060 DS(I) = DS(I) + V
 3080  GOTO 3040
 4000 S$ = ""
 4010  GET C$
 4020  IF  ASC (C$) < 32 GOTO 4050
 4030 S$ = S$ + C$
 4040  GOTO 4010
 4050  RETURN 
 5000  PRINT "$ ";
 5002  SPEED= 70: PRINT "df -h": SPEED= 170
 5004  FOR I = 0 TO 1000: NEXT I
 5006 S$ = "/"
 5008  GOSUB 1000
 5010  GOSUB 1000
 5015  PRINT V
 5020 UN = 70000000 - V
 5030 RE = 30000000 - UN
 5040 DE = 99999999
 5100  PRINT "$";
 5110  SPEED= 70: PRINT " cleanup": SPEED= 170
 5120  FOR I = 0 TO 1000: NEXT I
 5130  PRINT "NEED TO FREE ";RE;" BYTES..."
 5200  FOR I = 0 TO 199
 5210  IF  LEN (DN$(I)) = 0 THEN I = 199: GOTO 5230
 5220  IF DS(I) > RE AND DS(I) < DE THEN DE = DS(I)
 5230  NEXT I
 5240  PRINT "FREED ";DE;" BYTES."
 5250  GOTO 900
 6000  FOR I = 0 TO 199
 6010  IF  LEN (DN$(I)) = 0 THEN I = 199: GOTO 6030
 6020  PRINT DN$(I),DS(I)
 6030  NEXT I
 6040  RETURN