solve 2023 11.2
This commit is contained in:
parent
7ac6190bc3
commit
e73bc3ecb8
2 changed files with 38 additions and 24 deletions
|
@ -3,6 +3,42 @@ import AOCHelpers
|
||||||
|
|
||||||
aoc 2023, 11 do
|
aoc 2023, 11 do
|
||||||
def p1(input) do
|
def p1(input) do
|
||||||
|
input
|
||||||
|
|> read_input()
|
||||||
|
|> calculate_distances()
|
||||||
|
end
|
||||||
|
|
||||||
|
def p2(input) do
|
||||||
|
input
|
||||||
|
|> read_input()
|
||||||
|
|> calculate_distances(1_000_000)
|
||||||
|
end
|
||||||
|
|
||||||
|
def calculate_distances({galaxies, empty_columns, empty_rows}, expansion \\ 2) do
|
||||||
|
distance = make_distance_fn(empty_rows, empty_columns, expansion)
|
||||||
|
|
||||||
|
for [a, b] <- combinations(galaxies, 2), reduce: 0 do
|
||||||
|
acc -> acc + distance.(a, b)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def make_distance_fn(expanded_rows, expanded_columns, expansion) do
|
||||||
|
fn {x_a, y_a}, {x_b, y_b} ->
|
||||||
|
x_dist = abs(x_b - x_a)
|
||||||
|
y_dist = abs(y_b - y_a)
|
||||||
|
|
||||||
|
x_range = to_range(x_a, x_b)
|
||||||
|
y_range = to_range(y_a, y_b)
|
||||||
|
|
||||||
|
expanded_x = Enum.count(expanded_columns, &(&1 in x_range))
|
||||||
|
expanded_y = Enum.count(expanded_rows, &(&1 in y_range))
|
||||||
|
|
||||||
|
x_dist - expanded_x + expanded_x * expansion + (y_dist - expanded_y) +
|
||||||
|
expanded_y * expansion
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def read_input(input) do
|
||||||
{grid, {x_bounds, y_bounds}} = to_grid(input)
|
{grid, {x_bounds, y_bounds}} = to_grid(input)
|
||||||
|
|
||||||
empty_columns =
|
empty_columns =
|
||||||
|
@ -16,29 +52,7 @@ aoc 2023, 11 do
|
||||||
|> Enum.filter(&match?({_, "#"}, &1))
|
|> Enum.filter(&match?({_, "#"}, &1))
|
||||||
|> Enum.map(&elem(&1, 0))
|
|> Enum.map(&elem(&1, 0))
|
||||||
|
|
||||||
distance = make_distance_fn(empty_rows, empty_columns)
|
{galaxies, empty_columns, empty_rows}
|
||||||
|
|
||||||
for [a, b] <- combinations(galaxies, 2), reduce: 0 do
|
|
||||||
acc -> acc + distance.(a, b)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def p2(_input) do
|
|
||||||
end
|
|
||||||
|
|
||||||
def make_distance_fn(expanded_rows, expanded_columns) do
|
|
||||||
fn {x_a, y_a}, {x_b, y_b} ->
|
|
||||||
x_dist = abs(x_b - x_a)
|
|
||||||
y_dist = abs(y_b - y_a)
|
|
||||||
|
|
||||||
x_range = to_range(x_a, x_b)
|
|
||||||
y_range = to_range(y_a, y_b)
|
|
||||||
|
|
||||||
expanded_x = Enum.count(expanded_columns, &(&1 in x_range))
|
|
||||||
expanded_y = Enum.count(expanded_rows, &(&1 in y_range))
|
|
||||||
|
|
||||||
x_dist + expanded_x + y_dist + expanded_y
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def row(grid, y, x_bounds) do
|
def row(grid, y, x_bounds) do
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
1. [2020] **17/50** 🌟
|
1. [2020] **17/50** 🌟
|
||||||
1. [2021] **43/50** 🌟
|
1. [2021] **43/50** 🌟
|
||||||
1. [2022] **14/50** 🌟
|
1. [2022] **14/50** 🌟
|
||||||
1. [2023] **16/50** 🌟
|
1. [2023] **17/50** 🌟
|
||||||
|
|
||||||
[2015]: ./2015
|
[2015]: ./2015
|
||||||
[2017]: ./2017
|
[2017]: ./2017
|
||||||
|
|
Loading…
Reference in a new issue