@@ -5,32 +5,26 @@ defmodule AdventOfCode.Y2023.Day10 do
5
5
Difficulty: xl
6
6
Tags: graph graph-traversal needs-improvement not-fast-enough
7
7
"""
8
- alias AdventOfCode.Helpers . { InputReader , Transformers }
9
8
alias AdventOfCode.Algorithms.Grid
10
- alias Geo.Polygon
11
-
12
- import Topo , only: [ contains?: 2 ]
9
+ alias AdventOfCode.Helpers . { InputReader , Transformers }
13
10
14
11
def input , do: InputReader . read_from_file ( 2023 , 10 )
15
12
16
13
def run ( input \\ input ( ) ) do
17
14
input = parse ( input )
18
-
19
15
task_1 = Task . async ( fn -> run_1 ( input ) end )
20
16
task_2 = Task . async ( fn -> run_2 ( input ) end )
21
17
22
18
{ Task . await ( task_1 , :infinity ) , Task . await ( task_2 , :infinity ) }
23
19
end
24
20
25
- defp run_1 ( { _ , circuit } ) do
26
- circuit |> Enum . count ( ) |> div ( 2 )
27
- end
21
+ defp run_1 ( { _ , circuit } ) , do: circuit |> Enum . count ( ) |> div ( 2 )
28
22
29
23
defp run_2 ( { graph , circuit } ) do
30
24
graph
31
25
|> Graph . vertices ( )
32
26
|> Stream . reject ( & ( & 1 in circuit ) )
33
- |> Stream . map ( & contains? ( % Polygon { coordinates: [ circuit ] } , & 1 ) )
27
+ |> Stream . map ( & Topo . contains? ( % Geo. Polygon{ coordinates: [ circuit ] } , & 1 ) )
34
28
|> Enum . count ( & Function . identity / 1 )
35
29
end
36
30
@@ -40,10 +34,10 @@ defmodule AdventOfCode.Y2023.Day10 do
40
34
|> Enum . map ( & String . graphemes / 1 )
41
35
|> Grid . grid2d ( )
42
36
|> then ( fn grid ->
43
- { start , _ } = Enum . find ( grid , fn { _ , tile } -> tile == "S" end )
44
37
graph = to_graph ( grid )
45
- circuit = circuit_nodes ( graph , start )
46
- { graph , circuit }
38
+ { start , _ } = Enum . find ( grid , fn { _ , tile } -> tile == "S" end )
39
+
40
+ { graph , circuit_nodes ( graph , start ) }
47
41
end )
48
42
end
49
43
0 commit comments