Advertisement
Guest User

AOC2020Day11inGWBASIC

a guest
Dec 11th, 2020
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 100 DIM A%(1,100,100): CI%=0: NI%=1
  2. 101 SCREEN 1: CLS: LOCATE 5, 2: PRINT "LOADING DATA"
  3. 110 GOSUB 800
  4. 200 CLS: S$="DATA LOADED.": GOSUB 2100
  5. 205 SX%=50: SY%=50: GOSUB 2000
  6. 210 IT% = 1
  7. 210 LOCATE 5,2: PRINT IT%; " - CALCULATING..."
  8. 210 GOSUB 1000
  9. 215 LOCATE 5,2: PRINT CC; " SEATS CHANGED.       "
  10. 218 IF CC = 0 THEN GOTO 300
  11. 220 T%=CI%: CI%=NI%: NI%=T%: IT% = IT% + 1
  12. 230 SX%=50+120*CI%: SY%=50: GOSUB 2000
  13. 240 GOTO 210
  14. 299 REM
  15. 300 CS=0
  16. 310 FOR Y=1 TO MY%
  17. 320 FOR X=1 TO 100
  18. 330 IF A%(CI%,X,Y) MOD 4 = 2 THEN CS=CS+1
  19. 340 NEXT X
  20. 350 NEXT Y
  21. 355 LOCATE 1,2: PRINT "ITERATIONS COMPLETE!"
  22. 360 LOCATE 2,2: PRINT CS;" PEOPLE SEATED."
  23. 365 S$="": GOSUB 2100
  24. 370 GOSUB 1900
  25. 500 END
  26. 797 REM **************
  27. 798 REM LOAD SEAT DATA
  28. 799 REM **************
  29. 800 OPEN "I", 1, "data11.txt"
  30. 810 FOR Y = 1 TO 100
  31. 820 IF EOF(1) THEN MY%=Y: RETURN
  32. 830 LINE INPUT #1, S$
  33. 840 FOR X=1 TO LEN(S$)
  34. 850 C$=MID$(S$,X,1)
  35. 860 IF C$="." THEN A%(CI%,X,Y)=0 ELSE IF C$="L" THEN A%(CI%,X,Y)=1
  36. 870 NEXT X
  37. 880 NEXT Y
  38. 997 REM *********************
  39. 998 REM EVOLVE THE SEAT ARRAY
  40. 999 REM *********************
  41. 1000 CC=0
  42. 1001 FOR Y=1 TO MY%: FOR X=1 TO 100
  43. 1002 A%(NI%,X,Y) = A%(CI%,X,Y)
  44. 1003 NEXT: NEXT
  45. 1004 FOR Y=1 TO MY%
  46. 1005 LINE (3*Y,160)-(3*Y+2,170),CI%+1,BF
  47. 1010 FOR X=1 TO 100
  48. 1020 IF A%(CI%,X,Y) = 1 THEN DN%=1: GOSUB 1100
  49. 1030 IF A%(CI%,X,Y) MOD 4 = 2 AND A%(CI%,X,Y)>16 THEN DN%=-1: GOSUB 1100
  50. 1040 NEXT X
  51. 1050 NEXT Y
  52. 1060 RETURN
  53. 1070 REM
  54. 1100 A%(NI%,X-1,Y-1)=A%(NI%,X-1,Y-1)+4*DN%
  55. 1110 A%(NI%,X  ,Y-1)=A%(NI%,X  ,Y-1)+4*DN%
  56. 1120 A%(NI%,X+1,Y-1)=A%(NI%,X+1,Y-1)+4*DN%
  57. 1130 A%(NI%,X-1,Y  )=A%(NI%,X-1,Y  )+4*DN%
  58. 1135 A%(NI%,X  ,Y  )=A%(NI%,X  ,Y  )+DN%: REM **
  59. 1140 A%(NI%,X+1,Y  )=A%(NI%,X+1,Y  )+4*DN%
  60. 1150 A%(NI%,X-1,Y+1)=A%(NI%,X-1,Y+1)+4*DN%
  61. 1160 A%(NI%,X  ,Y+1)=A%(NI%,X  ,Y+1)+4*DN%
  62. 1170 A%(NI%,X+1,Y+1)=A%(NI%,X+1,Y+1)+4*DN%
  63. 1175 CC = CC + 1
  64. 1180 RETURN
  65. 1897 REM *****************
  66. 1898 REM WAIT FOR KEYPRESS
  67. 1899 REM *****************
  68. 1900 IF INKEY$ <> "" THEN RETURN ELSE GOTO 1900
  69. 1997 REM ******************************
  70. 1998 REM DISPLAY THE CURRENT SEAT ARRAY
  71. 1999 REM ******************************
  72. 2000 FOR PY%=1 TO MY%
  73. 2010 FOR PX%=1 TO 99
  74. 2020 PSET (SX%+PX%,SY%+PY%),A%(CI%,PX%,PY%) MOD 4
  75. 2030 NEXT: NEXT: RETURN
  76. 2097 REM ****************************
  77. 2098 REM DISPLAY A MESSAGE A SET PLACE
  78. 2099 REM *****************************
  79. 2100 LOCATE 5,2: PRINT "                    "
  80. 2110 LOCATE 5,2: PRINT S$: RETURN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement