2024 Day 14 Part 2 - sort of
This commit is contained in:
parent
5d3432ab87
commit
83d6f89769
1 changed files with 66 additions and 1 deletions
|
@ -21,7 +21,72 @@ defmodule Day14 do
|
|||
end
|
||||
|
||||
def part2({robots, size_x, size_y}) do
|
||||
:not_done_yet
|
||||
# The tree looks like this
|
||||
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
# X X
|
||||
# X X
|
||||
# X X
|
||||
# X X
|
||||
# X X X
|
||||
# X XXX X
|
||||
# X XXXXX X
|
||||
# X XXXXXXX X
|
||||
# X XXXXXXXXX X
|
||||
# X XXXXX X
|
||||
# X XXXXXXX X
|
||||
# X XXXXXXXXX X
|
||||
# X XXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXX X
|
||||
# X XXXXXXXXX X
|
||||
# X XXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXXXXXXXX X
|
||||
# X XXXXXXXXXXXXXXXXXXXXX X
|
||||
# X XXX X
|
||||
# X XXX X
|
||||
# X XXX X
|
||||
# X X
|
||||
# X X
|
||||
# X X
|
||||
# X X
|
||||
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
# Could improve this by searching for that pattern explicitly. In this case I just searched
|
||||
# manually: noticed things looked suspicious after 27 seconds
|
||||
# also noticed that repeated every 101 seconds
|
||||
# Checked each 101 second jump until found the above tree
|
||||
tick_forever(robots, size_x, size_y)
|
||||
end
|
||||
|
||||
def tick_forever(robots, size_x, size_y, count \\ 27, acc \\ 27) do
|
||||
robots = tick(robots, size_x, size_y, count)
|
||||
robomap = MapSet.new(robots, fn [x, y, _, _] -> {x, y} end)
|
||||
|
||||
for y <- 0..(size_y - 1) do
|
||||
for x <- 0..(size_x - 1) do
|
||||
if MapSet.member?(robomap, {x, y}) do
|
||||
IO.write("X")
|
||||
else
|
||||
IO.write(" ")
|
||||
end
|
||||
end
|
||||
|
||||
IO.puts("|")
|
||||
end
|
||||
|
||||
IO.gets("#{acc} tree?")
|
||||
|
||||
tick_forever(robots, size_x, size_y, 101, acc + 101)
|
||||
end
|
||||
|
||||
def tick(robots, size_x, size_y, times) do
|
||||
Enum.map(robots, fn [px, py, vx, vy] ->
|
||||
[Integer.mod(px + vx * times, size_x), Integer.mod(py + vy * times, size_y), vx, vy]
|
||||
end)
|
||||
end
|
||||
|
||||
def input do
|
||||
|
|
Loading…
Reference in a new issue