-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday10.jl
83 lines (82 loc) · 2.13 KB
/
day10.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
tdata = readlines("test10.txt")
##
function corrupted(data)
score = 0
for line in data
stack = []
for ch in line
if ch == '(' || ch == '[' || ch == '{' || ch == '<'
push!(stack, ch)
else
match = '0'
if length(stack) != 0
match = pop!(stack)
end
if ch == ')' && match != '('
score += 3
break
elseif ch == ']' && match != '['
score += 57
break
elseif ch == '}' && match != '{'
score += 1197
break
elseif ch == '>' && match != '<'
score += 25137
break
end
end
end
end
score
end
##
corrupted(tdata)
##
data = readlines("input10.txt")
corrupted(data)
##
function incomplete(data)
scores = []
for line in data
stack = []
corrupt = false
for ch in line
if ch == '(' || ch == '[' || ch == '{' || ch == '<'
push!(stack, ch)
else
match = '0'
if length(stack) != 0
match = pop!(stack)
end
if ch == ')' && match != '('
corrupt = true
break
elseif ch == ']' && match != '['
corrupt = true
break
elseif ch == '}' && match != '{'
corrupt = true
break
elseif ch == '>' && match != '<'
corrupt = true
break
end
end
end
if ~corrupt
score = 0
for opener in reverse(stack)
score *= 5
score += (1 * (opener == '(') + 2 * (opener == '[') + 3 * (opener == '{') + 4 * (opener == '<'))
end
push!(scores, score)
end
end
sort(scores)[length(scores)÷2+1]
end
##
incomplete(tdata)
##
incomplete(data)
##