Clean up day 12.
This commit is contained in:
parent
5f231facc6
commit
8459219e60
47
day12.cr
47
day12.cr
|
@ -1,4 +1,5 @@
|
||||||
require "advent"
|
require "advent"
|
||||||
|
DISTS = [{1, 0}, {0, 1}, {-1, 0}, {0, -1}]
|
||||||
INPUT = input(2020, 12).lines.map do |l|
|
INPUT = input(2020, 12).lines.map do |l|
|
||||||
{l[0], l[1..].to_i32}
|
{l[0], l[1..].to_i32}
|
||||||
end
|
end
|
||||||
|
@ -8,21 +9,14 @@ def part1(input)
|
||||||
angle = 0
|
angle = 0
|
||||||
input.each do |c, n|
|
input.each do |c, n|
|
||||||
case c
|
case c
|
||||||
when 'N'
|
when 'N' then pos = pos.add({0, n})
|
||||||
pos = pos.add({0, n})
|
when 'S' then pos = pos.add({0, -n})
|
||||||
when 'S'
|
when 'E' then pos = pos.add({n, 0})
|
||||||
pos = pos.add({0, -n})
|
when 'W' then pos = pos.add({-n, 0})
|
||||||
when 'E'
|
when 'L' then angle = (angle + n) % 360
|
||||||
pos = pos.add({n, 0})
|
when 'R' then angle = (angle + (360-n)) % 360
|
||||||
when 'W'
|
|
||||||
pos = pos.add({-n, 0})
|
|
||||||
when 'L'
|
|
||||||
angle = (angle + n) % 360
|
|
||||||
when 'R'
|
|
||||||
angle = (angle + (360-n)) % 360
|
|
||||||
when 'F'
|
when 'F'
|
||||||
dists = [{1, 0}, {0, 1}, {-1, 0}, {0, -1}]
|
dx, dy = DISTS[angle//90]
|
||||||
dx, dy = dists[angle//90]
|
|
||||||
pos = pos.add({dx * n, dy * n})
|
pos = pos.add({dx * n, dy * n})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -35,24 +29,13 @@ def part2(input)
|
||||||
angle = 0
|
angle = 0
|
||||||
input.each do |c, n|
|
input.each do |c, n|
|
||||||
case c
|
case c
|
||||||
when 'N'
|
when 'N' then pos = pos.add({0, n})
|
||||||
pos = pos.add({0, n})
|
when 'S' then pos = pos.add({0, -n})
|
||||||
when 'S'
|
when 'E' then pos = pos.add({n, 0})
|
||||||
pos = pos.add({0, -n})
|
when 'W' then pos = pos.add({-n, 0})
|
||||||
when 'E'
|
when 'L' then (n//90).times { pos = {-pos[1], pos[0]} }
|
||||||
pos = pos.add({n, 0})
|
when 'R' then (n//90).times { pos = {pos[1], -pos[0]} }
|
||||||
when 'W'
|
when 'F' then spos = spos.add({pos[0] * n, pos[1]*n})
|
||||||
pos = pos.add({-n, 0})
|
|
||||||
when 'L'
|
|
||||||
(n//90).times do
|
|
||||||
pos = {-pos[1], pos[0]}
|
|
||||||
end
|
|
||||||
when 'R'
|
|
||||||
(n//90).times do
|
|
||||||
pos = {pos[1], -pos[0]}
|
|
||||||
end
|
|
||||||
when 'F'
|
|
||||||
spos = spos.add({pos[0] * n, pos[1]*n})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
spos.map(&.abs).sum
|
spos.map(&.abs).sum
|
||||||
|
|
Loading…
Reference in New Issue
Block a user