Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

2016 / Day 3: Squares With Three Sides

2016/day03.livemd

2016 / Day 3: Squares With Three Sides

Puzzle

puzzle = "./puzzles/day03.txt" |> Path.expand(__DIR__) |> File.read!()

triangles =
  puzzle
  |> String.split("\n")
  |> Enum.slice(0..-2)
  |> Enum.map(fn line ->
    line |> String.trim() |> String.split() |> Enum.map(&String.to_integer/1)
  end)

:ok
:ok

Part1

Now that you can think clearly, you move deeper into the labyrinth of hallways and office furniture that makes up this part of Easter Bunny HQ. This must be a graphic design department; the walls are covered in specifications for triangles.

Or are they?

The design document gives the side lengths of each triangle it describes, but… 5 10 25? Some of these aren’t triangles. You can’t help but mark the impossible ones.

In a valid triangle, the sum of any two sides must be larger than the remaining side. For example, the “triangle” given above is impossible, because 5 + 10 is not larger than 25.

In your puzzle input, how many of the listed triangles are possible?

Enum.count(triangles, fn [a, b, c] ->
  a + b > c && a + c > b && b + c > a
end)
993

Part 2

Now that you’ve helpfully marked up their design documents, it occurs to you that triangles are specified in groups of three vertically. Each set of three numbers in a column specifies a triangle. Rows are unrelated.

For example, given the following specification, numbers with the same hundreds digit would be part of the same triangle:

101 301 501
102 302 502
103 303 503
201 401 601
202 402 602
203 403 603
````

In your puzzle input, and instead reading by columns, how many of the listed triangles are possible?
triangles
|> Enum.chunk_every(3)
|> Enum.flat_map(&Enum.zip/1)
|> Enum.count(fn {a, b, c} ->
  a + b > c && a + c > b && b + c > a
end)
1849