blob: 1b4fc781cbf84500605ec86cd9339b21c8e19dfa (
plain) (
blame)
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
|
r = File.read("day20")
#r = "^ENNWSWW(NEWS|)SSSEEN(WNSE|)EE(SWEN|)NNN$"
#r = "^WSSEESWWWNW(S|NENNEEEENN(ESSSSW(NWSW|SSEN)|WSWWN(E|WWS(E|SS))))$"
r.gsub!(/^\^|\$$/, '')
def dist(str)
seen = []
x = y = 0
str.chars.each { |c|
case c
when "E"; x += 1
when "W"; x -= 1
when "S"; y += 1
when "N"; y -= 1
end
seen << [x,y]
}
seen.uniq.size
end
p1 = 0
p2 = 0
stk = [""]
r.chars.each { |c|
case c
when "E", "S", "W", "N"
stk.last << c
p1 = [p1, dist(stk.last)].max
p2 += 1 if dist(stk.last) > 1000
when "("
stk << stk.last.dup
when "|"
stk.pop
stk << stk.last.dup
when ")"
stk.pop
end
}
p p1 # 3788
p p2 # 8568
# 9558 too high
# 9557 too high
|