-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday12.rb
executable file
·51 lines (41 loc) · 1.16 KB
/
day12.rb
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
#!/usr/bin/env ruby
def part_a(input)
directions = { 90 => :E, 180 => :S, 270 => :W, 0 => :N }
x, y, angle = 0, 0, 90
input.each do |action, value|
angle = (angle - value) % 360 if action == :L
angle = (angle + value) % 360 if action == :R
action = directions[angle] if action == :F
y -= value if action == :N
y += value if action == :S
x += value if action == :E
x -= value if action == :W
end
x.abs + y.abs
end
def part_b(input)
x, y, wx, wy = 0, 0, 10, -1
input.each do |action, value|
case action
when :L
(value / 90).times { wx, wy = wy, -wx}
when :R
(value / 90).times { wx, wy = -wy, wx}
when :N
wy -= value
when :S
wy += value
when :E
wx += value
when :W
wx -= value
else
x += wx * value
y += wy * value
end
end
x.abs + y.abs
end
input = File.readlines(ARGV[0]).map(&:strip).map { |x| [x[0].to_sym, x[1..-1].to_i] }
p part_a(input)
p part_b(input)