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
# h = 0
# d = 0
# ARGF.read.split("\n").map(&:split).each do |dir, n|
#   n = n.to_i
#   case dir
#   when "forward"
#     h += n
#   when "down"
#     d += n
#   when "up"
#     d -= n
#   else
#     fail dir
#   end
# end
# p h, d, h*d

h = 0
d = 0
aim = 0
ARGF.read.split("\n").map(&:split).each do |dir, n|
  n = n.to_i
  case dir
  when "forward"
    h += n
    d += aim * n
  when "down"
    aim += n
  when "up"
    aim -= n
  else
    fail dir
  end
end
p h, d, h*d