• API
• FAQ
• Tools
• Archive
SHARE
TWEET

2018-04 Sorceress  Dec 4th, 2018 104 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. DEFLNG A-Z
2. DIM raw(1200) AS STRING
3. DIM t AS INTEGER
4. DIM m(32, 60) AS INTEGER
5. DIM gid(32) AS INTEGER
6. DIM w\$(fake)
7.
8. OPEN "c:\aoc\2018\input04.txt" FOR INPUT AS #1
9. WHILE NOT EOF(1)
10.   INPUT #1, r\$: t = t + 1: raw(t) = r\$
11. WEND
12. CLOSE #1
13.
14. FOR i = 1 TO t - 1
15.   FOR j = 1 TO t - i
16.     IF raw(j) > raw(j + 1) THEN r\$ = raw(j): raw(j) = raw(j + 1): raw(j + 1) = r\$
17.   NEXT
18. NEXT
19.
20. FOR i = 1 TO t
21.   a\$ = raw(i): GOSUB strsplit
22.   SELECT CASE w\$(6)
23.     CASE "Guard": id = VAL(w\$(7)): GOSUB hGuard
24.     CASE "falls": t0 = VAL(w\$(5))
25.     CASE "wakes": t1 = VAL(w\$(5)): FOR j = t0 TO t1 - 1: m(h, j) = m(h, j) + 1: NEXT
26.   END SELECT
27. NEXT
28.
29. 'pt1
30. FOR h = 1 TO gc
31.   sum = 0: FOR j = 0 TO 59: sum = sum + m(h, j): NEXT
32.   IF sum > bigsum THEN bigsum = sum: bigh = h
33. NEXT
34. FOR j = 0 TO 59
35.   mm = m(bigh, j): IF mm > bigmm THEN bigmm = mm: bigj = j
36. NEXT
37. PRINT "part 1:"; gid(bigh) * bigj; " ( guard"; gid(bigh); "x minute"; bigj; ")"
38.
39. 'pt2
40. bigh = 0: bigsum = 0
41. FOR h = 1 TO gc
42.   FOR j = 0 TO 59
43.     IF m(h, j) > bigsum THEN bigsum = m(h, j): bigh = h: bigj = j
44.   NEXT
45. NEXT
46. PRINT "part 2:"; gid(bigh) * bigj; " ( guard"; gid(bigh); "x minute"; bigj; ")"
47.
48. END
49.
50.
51. '-------------------------------------------
52.
53. hGuard:
54. h = 0
55. FOR j = 1 TO gc
56.   IF gid(j) = id THEN h = j
57. NEXT
58. IF h = 0 THEN gc = gc + 1: gid(gc) = id: h = gc
59. RETURN
60.
61. strsplit:
62. REDIM w\$(16)
63. DL\$ = "[]-:# ": ii = 1: ok = 0
64. FOR jj = 1 TO LEN(a\$)
65.   b\$ = MID\$(a\$, jj, 1)
66.   splitme = 0
67.   FOR kk = 1 TO LEN(DL\$)
68.     IF b\$ = MID\$(DL\$, kk, 1) THEN splitme = 1
69.   NEXT
70.   IF splitme = 1 THEN
71.     IF ok = 1 THEN ii = ii + 1: ok = 0
72.   ELSE
73.     IF b\$ > " " THEN w\$(ii) = w\$(ii) + b\$: ok = 1
74.   END IF
75. NEXT
76. 'FOR i = 1 TO ii: PRINT i; ")  "; w\$(i): NEXT: SLEEP 'test
77. RETURN
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top