1
0
Fork 0

(wip) 2024 day 14

This commit is contained in:
sloane 2024-12-19 13:53:10 -05:00
parent 52db943b18
commit 3e4e1dfd4a
Signed by: sloanelybutsurely
SSH key fingerprint: SHA256:8SBnwhl+RY3oEyQxy1a9wByPzxWM0x+/Ejc+sIlY5qQ

62
2024/lib/2024/14.ex Normal file
View file

@ -0,0 +1,62 @@
import AOC
aoc 2024, 14 do
@example_bounds
# @bounds @example_bounds
# @real_bounds {101, 103}
def p1(input) do
robots =
input
|> read_robots()
|> Stream.iterate(fn robots ->
Enum.map(robots, &move_robot(&1, @bounds))
end)
|> Enum.at(100)
|> Enum.frequencies_by(&elem(&1, 0))
render(robots, @bounds)
:ok
end
def p2(_input) do
end
defp move_robot({{x, y}, {vx, vy} = velocity}, {max_x, max_y}) do
x_next = wrap_value(x + vx, max_x)
y_next = wrap_value(y + vy, max_y)
{{x_next, y_next}, velocity}
end
defp wrap_value(v, max) do
if v < 0 do
max + v
else
rem(v, max)
end
end
defp render(robots, {max_x, max_y}) do
for y <- 0..max_y do
line =
for x <- 0..max_x, into: "" do
"#{Map.get(robots, {x, y}, ".")}"
end
IO.puts(line)
end
end
## input
defp read_robots(input) do
~r/p=(\d+),(\d+) v=(-?\d+),(-?\d+)/
|> Regex.scan(input, capture: :all_but_first)
|> Enum.map(fn nums ->
[px, py, vx, vy] = Enum.map(nums, &String.to_integer/1)
{{px, py}, {vx, vy}}
end)
end
end