aoc_omni/ruby/2017/3/problem.rb
2025-11-30 21:22:21 -05:00

38 lines
643 B
Ruby

class Integer
def layer
((Math.sqrt(self).ceil) / 2) + 1
end
def layer_first_corner
(((self - 1) * 2) - 1)**2
end
def layer_length
(self - 1) << 3
end
def layer_side_length
layer_length >> 2
end
def layer_last_corner
(self + 1).layer_first_corner
end
def layer_middles
(0..3).map { |n| layer_first_corner + (layer_side_length >> 1) * ((2 * n) + 1) }
end
def layer_middles_offsets
layer.layer_middles.map { |middle| (middle - self).abs }
end
def distance
layer + layer_middles_offsets.min - 1
end
end
n = STDIN.read.chomp.to_i
part_1 = n.distance
puts "Part 1: #{part_1}"