@@ -3,31 +3,31 @@ defmodule AdventOfCode.Day15 do
33 nodes = parse ( args )
44 |> Map . update ( { 0 , 0 } , nil , fn { v , dist } -> { v , 0 } end )
55
6- target = get_target ( nodes )
6+ target = Map . keys ( nodes ) |> Enum . max ( )
77
88 dijkstra ( Map . delete ( nodes , { 0 , 0 } ) , { { 0 , 0 } , nodes [ { 0 , 0 } ] } , target )
99 end
1010
11- def get_target ( nodes ) do
12- { { max_r , _ } , _ } = Enum . max_by ( nodes , fn { { r , _c } , _ } -> r end )
13- { { _ , max_c } , _ } = Enum . max_by ( nodes , fn { { _r , c } , _ } -> c end )
14-
15- { max_r , max_c }
16- end
17-
1811 def dijkstra ( _unvisited , { { r , c } , { _ , distance } } , { r , c } ) , do: distance
1912
2013 def dijkstra ( unvisited , { coord , { label , distance } } , target ) do
14+ IO . puts ( Enum . count ( unvisited ) )
2115 neighbors = get_neighbors ( unvisited , coord )
22- |> Map . map ( fn { _ , { v , d } } ->
23- { v , min ( distance + v , d ) }
16+ |> Map . map ( fn
17+ { _ , { v , :infinity } } ->
18+ { v , distance + v }
19+ { _ , { v , d } } ->
20+ { v , min ( distance + v , d ) }
2421 end )
2522
2623 updated_unvisited = update_distances ( unvisited , neighbors )
2724
28- next = Enum . min_by ( updated_unvisited , fn { _ , { _ , d } }
29- -> d
30- end )
25+ next = Enum . reject ( updated_unvisited , fn
26+ { _ , { _ , :infinity } } ->
27+ true
28+ _ -> false
29+ end )
30+ |> Enum . min_by ( fn { _ , { _ , d } } -> d end )
3131
3232 dijkstra ( Map . delete ( updated_unvisited , coord ) , next , target )
3333 end
@@ -47,6 +47,16 @@ defmodule AdventOfCode.Day15 do
4747 end
4848
4949 def part2 ( args ) do
50+ initial = parse ( args )
51+
52+ { max_row , max_col } = target = Map . keys ( initial ) |> Enum . max ( )
53+
54+ nodes = expand_board ( initial , { max_row + 1 , max_row + 1 } )
55+ |> Map . update ( { 0 , 0 } , nil , fn { v , dist } -> { v , 0 } end )
56+
57+ new_target = Map . keys ( nodes ) |> Enum . max ( )
58+
59+ dijkstra ( Map . delete ( nodes , { 0 , 0 } ) , { { 0 , 0 } , nodes [ { 0 , 0 } ] } , new_target )
5060 end
5161
5262 def expand_board ( board , { max_row , max_col } ) do
0 commit comments