@@ -98,21 +98,38 @@ defmodule Mix.Tasks.Day1 do
98
98
99
99
## Examples
100
100
101
- iex> Mix.Tasks.Day1.detect_duplicate_frequency ([+1, -1])
101
+ iex> Mix.Tasks.Day1.detect_repeated_frequency ([+1 -1])
102
102
0
103
103
104
- iex> Mix.Tasks.Day1.detect_duplicate_frequency ([+3, +3, +4, -2, -4])
104
+ iex> Mix.Tasks.Day1.detect_repeated_frequency ([+3, +3, +4, -2, -4])
105
105
10
106
106
107
- iex> Mix.Tasks.Day1.detect_duplicate_frequency ([-6, +3, +8, +5, -6])
107
+ iex> Mix.Tasks.Day1.detect_repeated_frequency ([-6, +3, +8, +5, -6])
108
108
5
109
109
110
- iex> Mix.Tasks.Day1.detect_duplicate_frequency ([+7, +7, -2, -7, -4])
110
+ iex> Mix.Tasks.Day1.detect_repeated_frequency ([+7, +7, -2, -7, -4])
111
111
14
112
-
113
112
"""
114
113
115
- def detect_duplicate_frequency ( list ) do
116
- 0
114
+ def detect_repeated_frequency ( list ) do
115
+ detect_repeated_frequency ( list , 0 , [ ] )
116
+ end
117
+
118
+ def detect_repeated_frequency ( list , index , frequencies ) do
119
+ nindex = if index >= length ( list ) do
120
+ 0
121
+ else
122
+ index
123
+ end
124
+
125
+ current_frequency = List . last ( frequencies ) || 0
126
+ frequency_change = Enum . at ( list , nindex )
127
+ next_frequency = current_frequency + frequency_change
128
+
129
+ if Enum . member? ( frequencies , next_frequency ) do
130
+ next_frequency
131
+ else
132
+ detect_repeated_frequency ( list , nindex + 1 , frequencies ++ [ next_frequency ] )
133
+ end
117
134
end
118
135
end
0 commit comments