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
diagram = ARGF.read.split("\n").map(&:chars)
dir = [0, 1]
y = 0
x = diagram[y].index(?|)
begin
steps = 0
loop do
case diagram[y][x]
when ?+
dir = if dir[0] == 0 # going vertically
if (diagram[y][x-1] || " ") != " "
[-1, 0]
else
[1, 0]
end
else # going horizontally
if (diagram[y-1][x] || " ") != " "
[0, -1]
else
[0, 1]
end
end
when /[a-z]/i
# print diagram[y][x]
when /\||\+|-/
else
raise diagram[y][x]
end
x,y = [x,y].zip(dir).map {|a,b| a + b}
steps += 1
end
rescue
puts steps
end