mirror of
https://github.com/wezm/advent-of-code.git
synced 2024-12-18 18:29:55 +00:00
Compare commits
2 commits
9d3198e24b
...
bb2ee520ab
Author | SHA1 | Date | |
---|---|---|---|
bb2ee520ab | |||
083b47c23b |
3 changed files with 223 additions and 0 deletions
72
2023/day11.rb
Normal file
72
2023/day11.rb
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
MULTIPLIER = ENV["MULTIPLIER"].to_i || 2
|
||||||
|
input = ARGF.read.strip
|
||||||
|
by_row = input.lines.map(&:rstrip).map { |line| line.split("") }
|
||||||
|
|
||||||
|
def needs_expand(data)
|
||||||
|
expand = []
|
||||||
|
data.each_with_index { |row, i| expand << i if row.all? { |c| c == "." || c == "," } }
|
||||||
|
expand
|
||||||
|
end
|
||||||
|
|
||||||
|
def print_cosmos(cosmos)
|
||||||
|
cosmos.each do |line|
|
||||||
|
puts line.join("")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# do expansion
|
||||||
|
row_expand = needs_expand(by_row)
|
||||||
|
row_expand.reverse.each do |i|
|
||||||
|
by_row[i] = ("," * by_row[i].length).split("") # add expansion marker
|
||||||
|
end
|
||||||
|
|
||||||
|
by_column = by_row.transpose
|
||||||
|
col_expand = needs_expand(by_column)
|
||||||
|
col_expand.reverse.each do |i|
|
||||||
|
by_column[i] = ("," * by_column[i].length).split("") # add expansion marker
|
||||||
|
end
|
||||||
|
|
||||||
|
cosmos = by_column.transpose
|
||||||
|
print_cosmos(cosmos)
|
||||||
|
|
||||||
|
# find galaxies
|
||||||
|
galaxies = []
|
||||||
|
(0...cosmos.first.length).each do |x|
|
||||||
|
(0...cosmos.length).each do |y|
|
||||||
|
galaxies << [x, y] if cosmos[y][x] == "#"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def galaxy_distance(a, b)
|
||||||
|
(a[0] - b[0]).abs + (a[1] - b[1]).abs
|
||||||
|
end
|
||||||
|
|
||||||
|
def cosmos_at(x, y, cosmos)
|
||||||
|
cosmos[y][x]
|
||||||
|
end
|
||||||
|
|
||||||
|
distances = galaxies.combination(2).map do |combo|
|
||||||
|
a, b = combo.sort
|
||||||
|
distance = galaxy_distance(a, b)
|
||||||
|
|
||||||
|
# see how many millions are crossed in x
|
||||||
|
x_millions = (a[0]..b[0]).filter_map do |x|
|
||||||
|
loc = cosmos_at(x, a[1], cosmos)
|
||||||
|
loc if loc == ","
|
||||||
|
end
|
||||||
|
|
||||||
|
# now y component
|
||||||
|
range = if a[1] > b[1]
|
||||||
|
b[1]..a[1]
|
||||||
|
else
|
||||||
|
a[1]..b[1]
|
||||||
|
end
|
||||||
|
y_millions = range.filter_map do |y|
|
||||||
|
loc = cosmos_at(b[0], y, cosmos)
|
||||||
|
loc if loc == ","
|
||||||
|
end
|
||||||
|
|
||||||
|
distance + ((x_millions.length + y_millions.length) * MULTIPLIER) - x_millions.length - y_millions.length
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "Sum of distances with multiplier #{MULTIPLIER}: #{distances.sum}"
|
11
2023/input/day11.sample
Normal file
11
2023/input/day11.sample
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....
|
||||||
|
|
140
2023/input/day11.txt
Normal file
140
2023/input/day11.txt
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
....................................#..............#.................................#......................................................
|
||||||
|
............#......#..........................................................#.....................................#.................#.....
|
||||||
|
.........................................................................................#...................#..............................
|
||||||
|
.....#......................................................#...............................................................................
|
||||||
|
..........................................................................#........................#.............................#..........
|
||||||
|
......................#.................#...............................................................................#...................
|
||||||
|
........#......................................................#...............................#............................................
|
||||||
|
...........................#.................#.......................................#...................#.........#.................#......
|
||||||
|
.#................#.......................................#..........#........#.............................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
..................................#.........................................................................................................
|
||||||
|
.........................................................................................#.................................#................
|
||||||
|
.......#.............#................................#........#.....................................#......................................
|
||||||
|
..........................................#.................................................................................................
|
||||||
|
.............#...............................................................................................#..........#...................
|
||||||
|
....................................#.................................#............#....................#......................#............
|
||||||
|
............................................................................................#...............................................
|
||||||
|
........#...........................................#.......#.............................................................................#.
|
||||||
|
.....................#.......#..................................................#....................................................#......
|
||||||
|
..............#........................#.......#........................#................................................#..................
|
||||||
|
.......................................................#..........................................................#.........................
|
||||||
|
..#..............................................................#..........#.......................#.......................................
|
||||||
|
..................................................#......................................................#..................................
|
||||||
|
......................................................................................................................#.....................
|
||||||
|
.....#................................#...............................................#.....................................................
|
||||||
|
...................#.....#...............................#.......................#..............#..........................#................
|
||||||
|
.........#.................................#................................................................................................
|
||||||
|
..................................................................#.................................#......#.......................#........
|
||||||
|
............................#........................................................................................#..................#...
|
||||||
|
.................#...............................#............#............#................................................................
|
||||||
|
................................#................................................................#..........................................
|
||||||
|
............................................#.........................................#.......................................#.............
|
||||||
|
.........#.................................................................................#............................#............#......
|
||||||
|
..#....................................................#..........#.............#.........................#.................................
|
||||||
|
...........................#...................#............................................................................................
|
||||||
|
...................................#...................................#..........................................................#.........
|
||||||
|
................#..................................................................#..................#..........#..........................
|
||||||
|
.............................................................#...............................#..............................................
|
||||||
|
#.................................................................................................#.......................#.................
|
||||||
|
.........................#...............#..................................................................................................
|
||||||
|
...........................................................................................................#..................#......#......
|
||||||
|
.........................................................#.................................................................................#
|
||||||
|
..............................#.............#......#....................................................................#...................
|
||||||
|
.....#......................................................................#...............................................................
|
||||||
|
...............................................................................................................#.......................#....
|
||||||
|
............#.........#................#...............#............#...........#...........#........................#......................
|
||||||
|
............................................................................................................................................
|
||||||
|
................#.................................#............#..........................................................#........#........
|
||||||
|
...............................#...............................................................#...........................................#
|
||||||
|
.........................................#.............................#.............................#......................................
|
||||||
|
...................................................................................#.......................#................................
|
||||||
|
.........#................#...................#.........................................#...............................#...............#...
|
||||||
|
....................#................#......................................#.....................#.............#...........................
|
||||||
|
............................................................................................................................................
|
||||||
|
......................................................................#.....................................................................
|
||||||
|
......#..........................................................#........................................................................#.
|
||||||
|
.............#.........................#.......................................#............................#.....#......#..................
|
||||||
|
.........................#........#.........#......#.................................#.....#................................................
|
||||||
|
..#.....................................................#.........................................#.........................................
|
||||||
|
....................#...............................................#.......................................................................
|
||||||
|
........................................................................................................#.......................#.......#...
|
||||||
|
.............................#...................................................#.........................................#................
|
||||||
|
....................................................................................................#.......................................
|
||||||
|
.......#..........#..............................................#........#.................#..................#............................
|
||||||
|
....................................#..........#......#.....#.........................................................#.............#.......
|
||||||
|
............................................................................................................................................
|
||||||
|
..............................#................................................................#..........#.................................
|
||||||
|
..#..............................................................................................................................#..........
|
||||||
|
..............................................................................................................#.............................
|
||||||
|
.................................................#........................#...............................................#.................
|
||||||
|
...................#.....................................................................................................................#..
|
||||||
|
......#....................#......#.....#................#...................................#.............#................................
|
||||||
|
.............................................#.......................................#...............................#......................
|
||||||
|
.................................................................................................#..........................................
|
||||||
|
...#.................................................................#...........#..........................................................
|
||||||
|
....................#..............................................................................................................#........
|
||||||
|
..........#.....................#...........................................................#.............#...............................#.
|
||||||
|
............................................................................................................................................
|
||||||
|
..................................................#............................................................#...........#................
|
||||||
|
...........................................#........................#.........#.....................#.......................................
|
||||||
|
.#.........................#..............................#.................................................................................
|
||||||
|
.....................................................................................#.........................................#............
|
||||||
|
..............................................................................................#......................#...................#..
|
||||||
|
.....#...........#.....#.....................#..............................................................#...............................
|
||||||
|
..........#....................................................#.....#......................................................................
|
||||||
|
#...............................#.....#.....................................................................................................
|
||||||
|
........................................................#.........................#...................#........#..................#.........
|
||||||
|
.............................................................................................................................#.............#
|
||||||
|
.........................................................................#.................................#................................
|
||||||
|
.........#.......#................................#..............................................#.....................................#....
|
||||||
|
............................................................................................................................................
|
||||||
|
................................#............#........................#.........................................#...........................
|
||||||
|
............#...............................................#........................#................#...............#.....................
|
||||||
|
..#....................#..........................................#..........................................................#..............
|
||||||
|
...................................................#......................................................................................#.
|
||||||
|
................#....................................................................................................................#......
|
||||||
|
.......#..................................................#...................#.............#..............#................................
|
||||||
|
.................................................................................................................................#..........
|
||||||
|
...................#...........#............................................................................................................
|
||||||
|
.........................................#.....................#....................................#.........#.......#.....................
|
||||||
|
.#........................................................................#..............................#..................................
|
||||||
|
............#.....................#.....................................................................................................#...
|
||||||
|
.......#....................................................................................................................................
|
||||||
|
.................................................................#............#...................#........................#......#.........
|
||||||
|
........................................................................................#.......................#...........................
|
||||||
|
.........................................#.............................#....................................................................
|
||||||
|
..............#......#...............................................................................................................#......
|
||||||
|
................................................................................................#......................#....................
|
||||||
|
............................#............................#..........................#..................#...................................#
|
||||||
|
...........#...............................................................................#....................................#...........
|
||||||
|
............................................................................................................................................
|
||||||
|
.................#.......#............#.......................................................................#.............................
|
||||||
|
............................................................................................................................................
|
||||||
|
...#.........................#.................................#...............#............................................#.....#.........
|
||||||
|
......................................................#...................#..........#.........#.....#....................................#.
|
||||||
|
...................................#.........#......................................................................#.......................
|
||||||
|
............................................................................................................................................
|
||||||
|
..........#..............#...................................#..............................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.....#...................................................#...............................#...................#..........#..................#
|
||||||
|
..............................#.......#........#............................................................................................
|
||||||
|
.................#...............................................................#.................................#........................
|
||||||
|
.....................................................................#........................................................#.............
|
||||||
|
............#..................................................................................#............................................
|
||||||
|
.......................#..................................#..............................................................#.............#....
|
||||||
|
...................................#........................................................................................................
|
||||||
|
...........................................................................#.......................................................#........
|
||||||
|
........#....................#.....................#...............#................................#..............#........................
|
||||||
|
...#.........#.............................#.........................................#...................#..................................
|
||||||
|
..............................................................................#..............#........................................#.....
|
||||||
|
..................................#.......................................................................................#.................
|
||||||
|
........................#...................................................................................................................
|
||||||
|
.......................................................#.............................................#............#.........................
|
||||||
|
............................#........#..............................#.......................................................................
|
||||||
|
...#........................................................#............#............#............................................#........
|
||||||
|
.................#..........................#...............................................................................................
|
||||||
|
..........................................................................................#................................................#
|
||||||
|
..........#.................................................................................................................................
|
||||||
|
.........................#............#........................................................#............................................
|
||||||
|
...............#...................................#......................#..............................#...........#......................
|
Loading…
Reference in a new issue