add day 7
parent
87cf8fed02
commit
c4bfb6ae3e
@ -0,0 +1,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
|
||||
|
Loading…
Reference in New Issue