Skip to content

Instantly share code, notes, and snippets.

@sasa1977
Created December 13, 2017 18:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sasa1977/8b7f5151cde532a8651f04ec3a0e4034 to your computer and use it in GitHub Desktop.
Save sasa1977/8b7f5151cde532a8651f04ec3a0e4034 to your computer and use it in GitHub Desktop.
defmodule Day13 do
def part2(), do:
scanners() |> count(-1, 0) |> IO.inspect
def scanners(), do:
"input.txt"
|> File.stream!()
|> Stream.map(&String.trim/1)
|> Stream.map(fn row -> row |> String.split(": ") |> Enum.map(&String.to_integer/1) end)
|> Enum.map(fn [pos, depth] -> {{-pos, 2 * (depth - 1)}, nil} end)
|> Enum.sort()
|> :gb_trees.from_orddict
defp count(scanners, previous, count) do
{{pos, interval}, nil, scanners} = :gb_trees.take_smallest(scanners)
new_pos = pos + interval
scanners = :gb_trees.enter({new_pos, interval}, nil, scanners)
cond do
pos < 0 -> count(scanners, previous, count)
pos == previous -> count(scanners, previous, count)
pos == previous + 1 -> count(scanners, pos, count + 1)
true -> count
end
end
end
Day13.part2()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment