diff --git a/day7/both.bas b/day7/both.bas new file mode 100644 index 0000000..efe35a8 --- /dev/null +++ b/day7/both.bas @@ -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 +