Advertisement
Guest User

AOC2020Day14Part1InGWBASIC

a guest
Dec 14th, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 10 GOSUB 140: OPEN "I",1,"data14.txt": WHILE NOT EOF(1): LINE INPUT#1, S$
  2. 20 IF INSTR(S$,"mem") THEN GOSUB 40 ELSE M$=MID$(S$,8)
  3. 30 WEND: GOSUB 230: PRINT "PART 1: ";V#: END
  4. 40 E=INSTR(S$,"]"): X#=VAL(MID$(S$,5,E-5)): Y#=VAL(MID$(S$,E+4))
  5. 50 Z$="": FOR I=36 TO 1 STEP -1: R=Y#-INT(Y#/2)*2: Y#=INT(Y#/2)
  6. 60 MC$=MID$(M$,I,1): IF MC$="X" THEN IF R=0 THEN MC$="0" ELSE MC$="1"
  7. 70 Z$=MC$+Z$: NEXT I
  8. 80 Y#=0: FOR I=1 TO LEN(Z$): Y#=Y#*2: IF MID$(Z$,I,1)="1" THEN Y#=Y#+1
  9. 90 NEXT I: K#=X#: V#=Y#: GOSUB 170: RETURN
  10. 100 ' ************************************************************************
  11. 110 ' Simple Dictionary. Stores up to 1000 values. key K# -> value V#
  12. 120 ' 140: Setup.  170: SET.  180: GET.  200: DEL.  220: IN.  230: SUM.
  13. 130 ' ************************************************************************
  14. 140 DIM HK#(999), HV#(999): FOR I=0 TO 999: HK#(I)=-1: NEXT: RETURN
  15. 150 H%=K#-INT(K#/1000)*1000
  16. 160 WHILE HK#(H%)<>-1 AND HK#(H%)<>K#: H%=(H%+1) MOD 1000: WEND: RETURN
  17. 170 GOSUB 150: HK#(H%)=K#: HV#(H%)=V#: RETURN
  18. 180 GOSUB 150: IF HK#(H%)<>-1 THEN V#=HV#(H%): RETURN
  19. 190 V#=-1: PRINT "Invalid key: ";K#: RETURN
  20. 200 GOSUB 150: IF HK#(H%)=K# THEN HK#(H%)=-1: RETURN
  21. 210 PRINT "Key not present to delete: ";K#: RETURN
  22. 220 GOSUB 150: V# = (HK#(H%) = K#): RETURN
  23. 230 V#=0: FOR I=0 TO 999: IF HK#(I)<>-1 THEN V#=V#+HV#(I)
  24. 240 NEXT I: RETURN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement