2022 Day 9 Part 1
This commit is contained in:
parent
08ced7392b
commit
6c3937e4f8
1 changed files with 62 additions and 0 deletions
62
2022/day9.rb
Normal file
62
2022/day9.rb
Normal file
|
@ -0,0 +1,62 @@
|
|||
require "set"
|
||||
|
||||
$headX = 0
|
||||
$headY = 0
|
||||
$tailX = 0
|
||||
$tailY = 0
|
||||
|
||||
$tailPositions = Set[[$tailX, $tailY]]
|
||||
|
||||
def moveStep(dx, dy)
|
||||
$headX += dx
|
||||
$headY += dy
|
||||
|
||||
dx = $headX - $tailX
|
||||
dy = $headY - $tailY
|
||||
|
||||
case [dx.abs, dy.abs]
|
||||
when [0, 0], [1, 1], [1, 0], [0, 1] then
|
||||
|
||||
when [2, 0], [0, 2], [2, 2] then
|
||||
$tailX += dx <=> 0
|
||||
$tailY += dy <=> 0
|
||||
when [2, 1] then
|
||||
$tailX += dx <=> 0
|
||||
$tailY += dy <=> 0
|
||||
when [1, 2] then
|
||||
$tailX += dx <=> 0
|
||||
$tailY += dy <=> 0
|
||||
else
|
||||
puts "Unknown: (#{dx}, #{dy})"
|
||||
raise
|
||||
end
|
||||
|
||||
$tailPositions.add [$tailX, $tailY]
|
||||
end
|
||||
|
||||
|
||||
for line in File.readlines('day9.input')
|
||||
unless /^(?<dir>[RLUD]) (?<steps>\d+)$/ =~ line
|
||||
puts "Failed to parse #{line}"
|
||||
raise
|
||||
end
|
||||
|
||||
steps = steps.to_i
|
||||
|
||||
case dir
|
||||
when "R" then
|
||||
steps.times { moveStep 1, 0 }
|
||||
when "L" then
|
||||
steps.times { moveStep -1, 0 }
|
||||
when "U" then
|
||||
steps.times { moveStep 0, 1 }
|
||||
when "D" then
|
||||
steps.times { moveStep 0, -1 }
|
||||
else
|
||||
raise
|
||||
end
|
||||
end
|
||||
|
||||
puts $tailPositions.count
|
||||
|
||||
|
Loading…
Add table
Reference in a new issue