Optimal algorithms!

This commit is contained in:
Daniel Cortés
2020-12-09 03:55:31 -03:00
parent 1be1c37986
commit c074786afb

View File

@@ -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))