Optimal algorithms!
This commit is contained in:
@@ -1,20 +1,37 @@
|
||||
def is_sum(number, series):
|
||||
for i in series:
|
||||
if (number - i) in series:
|
||||
return True
|
||||
def find_pair_sum(number, series):
|
||||
i = 0
|
||||
j = len(series) - 1
|
||||
series.sort()
|
||||
|
||||
current = series[i] + series[j]
|
||||
|
||||
while i < j:
|
||||
current = series[i] + series[j]
|
||||
if current == number: return True
|
||||
|
||||
if current < number: i += 1
|
||||
if current > number: j -= 1
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def find_contiguous_sum(number, series):
|
||||
for i in range(0, len(series)):
|
||||
for j in range(i, len(series)):
|
||||
if sum(series[i:j + 1]) == number:
|
||||
return series[i:j+1]
|
||||
current = 0
|
||||
i = 0
|
||||
j = 0
|
||||
|
||||
while current != number:
|
||||
if current < number: j += 1
|
||||
elif current > number: i += 1
|
||||
current = sum(series[i:j])
|
||||
|
||||
return series[i:j]
|
||||
|
||||
|
||||
def solve_a(data, length):
|
||||
for i in range(length, len(data)):
|
||||
def solve_a(data):
|
||||
for i in range(25, len(data)):
|
||||
number = data[i]
|
||||
if not is_sum(number, data[i - length:i]):
|
||||
if not find_pair_sum(number, data[i-25:i]):
|
||||
return number
|
||||
|
||||
def solve_b(number, data):
|
||||
@@ -24,7 +41,7 @@ def solve_b(number, data):
|
||||
|
||||
data = [int(line.strip()) for line in open('input')]
|
||||
|
||||
result = solve_a(data, 25)
|
||||
result = solve_a(data)
|
||||
print(result)
|
||||
print(solve_b(result, data))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user