@@ -54,27 +54,21 @@ defmodule Day14 do
54
54
rotate ( tails , acc ++ [ Enum . reverse ( heads ) ] )
55
55
end
56
56
57
- def calc_load ( [ ] , _ , acc ) , do: acc
58
- def calc_load ( [ "O" | t ] , i , acc ) , do: calc_load ( t , i + 1 , acc + i )
59
- def calc_load ( [ _ | t ] , i , acc ) , do: calc_load ( t , i + 1 , acc )
60
- def calc_load ( l ) , do: calc_load ( l , 1 , 0 )
57
+ def calc_load ( l ) do
58
+ Enum . with_index ( l )
59
+ |> Enum . reduce ( 0 , fn { x , i } , acc -> if ( x == "O" , do: acc + i + 1 , else: acc ) end )
60
+ end
61
+
61
62
def calc_all_loads ( ll ) , do: Enum . map ( ll , & calc_load / 1 ) |> Enum . sum ( )
62
63
63
- def tilt_1_cycle ( ll ) do
64
- ll |> tilt_and_rotate ( ) |> tilt_and_rotate ( ) |> tilt_and_rotate ( ) |> tilt_and_rotate ( )
65
- end
64
+ def tilt_1_cycle ( ll ) , do: Enum . reduce ( 1 .. 4 , ll , fn _ , acc -> tilt_and_rotate ( acc ) end )
66
65
67
- def tilt_n_cycle ( ll , n ) , do: tilt_n_cycle ( ll , n , % { n: n } )
66
+ def tilt_n_cycle ( ll , n ) , do: tilt_n_cycle ( ll , n , % { } )
68
67
def tilt_n_cycle ( ll , 0 , _ ) , do: ll
69
68
70
69
def tilt_n_cycle ( ll , m , memo ) do
71
- new_m =
72
- case is_map_key ( memo , ll ) do
73
- true -> Integer . mod ( m , memo [ ll ] - m ) - 1
74
- false -> m - 1
75
- end
76
-
77
- tilt_n_cycle ( ll |> tilt_1_cycle ( ) , new_m , Map . put ( memo , ll , m ) )
70
+ new_m = if Map . has_key? ( memo , ll ) , do: Integer . mod ( m , memo [ ll ] - m ) , else: m
71
+ tilt_n_cycle ( tilt_1_cycle ( ll ) , new_m - 1 , Map . put ( memo , ll , m ) )
78
72
end
79
73
end
80
74
0 commit comments