]> code.bitgloo.com Git - clyne/advent-of-code.git/commitdiff
add day 7
authorClyne Sullivan <clyne@bitgloo.com>
Thu, 8 Dec 2022 02:13:08 +0000 (21:13 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Thu, 8 Dec 2022 02:13:08 +0000 (21:13 -0500)
day7/both.bas [new file with mode: 0644]

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