I've been trying to add some meaningful commentary or thoughts along with each of these posts about Crystal, the puzzle, my solution, or coding in general. But today, I've got nothing. The puzzle wasn't all that complicated, and my code isn't all that great.
I gave up after day 11 last year, so hopefully I'll be able to get a little further this year!
Here's my code:
input = File.read("input").strip
lines = input.split("\n")
galaxies = lines.map_with_index do |line, row|
line.scan(/#/).map { |match| {row, match.begin} }
end.flatten
empty_rows = (0..(lines.size - 1)).select do |row|
!galaxies.find { |(x, _)| x == row }
end
empty_cols = (0..(lines[0].size - 1)).select do |col|
!galaxies.find { |(_, y)| y == col }
end
expanded_universe = galaxies.map do |x, y|
{
x + empty_rows.select { |row| row < x }.size,
y + empty_cols.select { |col| col < y }.size
}
end
part1 = begin
lengths = 0
expanded_universe.each_cartesian(expanded_universe) do |(x1, y1), (x2, y2)|
if {x1, y1} < {x2, y2}
lengths += (x2 - x1).abs + (y2 - y1).abs
end
end
lengths
end
puts part1
older_universe = galaxies.map do |x, y|
{
x.to_i64 + (empty_rows.select { |row| row < x }.size.to_i64 * 999_999_i64),
y.to_i64 + (empty_cols.select { |col| col < y }.size.to_i64 * 999_999_i64)
}
end
part2 = begin
lengths = 0_i64
older_universe.each_cartesian(older_universe) do |(x1, y1), (x2, y2)|
if {x1, y1} < {x2, y2}
lengths += (x2 - x1).abs + (y2 - y1).abs
end
end
lengths
end
puts part2
Top comments (0)