-
Notifications
You must be signed in to change notification settings - Fork 184
/
Copy pathpart2.jl
executable file
·73 lines (73 loc) · 1.96 KB
/
part2.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
#!/usr/bin/env julia
m = map(x -> map(x -> x[1], split(x, "")), readlines(stdin))
let c = 1, d = Dict(), e = [], f = []
for (i, v) in enumerate(m)
for (j, x) in enumerate(m[i])
if m[i][j] in "<>^v"
if haskey(d, (i, j))
delete!(d, (i, j))
end
d[(i, j)] = c
c += 1
push!(e, 0)
if m[i][j] in "<>"
push!(f, m[i][j] == '<' ? 0 : 2)
m[i][j] = '-'
else
push!(f, m[i][j] == '^' ? 1 : 3)
m[i][j] = '|'
end
end
end
end
while true
if length(d) == 1
y, x = collect(keys(d))[1]
println("$(x - 1),$(y - 1)")
break
end
for k in sort(collect(keys(d)))
if !haskey(d, k)
continue
end
u = d[k]
delete!(d, k)
i, j = k
y, x = i, j
if f[u] % 4 == 0
x -= 1
elseif f[u] % 4 == 1
y -= 1
elseif f[u] % 4 == 2
x += 1
else
y += 1
end
if haskey(d, (y, x))
delete!(d, (y, x))
else
d[(y, x)] = u
end
if m[y][x] == '+'
if e[u] % 3 == 0
f[u] -= 1
elseif e[u] %3 == 2
f[u] += 1
end
e[u] += 1
elseif m[y][x] == '\\'
if f[u] % 4 == 0
f[u] = 1
elseif f[u] % 4 == 1
f[u] = 0
elseif f[u] % 4 == 2
f[u] = 3
else
f[u] = 2
end
elseif m[y][x] == '/'
f[u] = 3 - (f[u] % 4)
end
end
end
end