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): def find_pair_sum(number, series):
for i in series: i = 0
if (number - i) in series: j = len(series) - 1
return True 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 return False
def find_contiguous_sum(number, series): def find_contiguous_sum(number, series):
for i in range(0, len(series)): current = 0
for j in range(i, len(series)): i = 0
if sum(series[i:j + 1]) == number: j = 0
return series[i:j+1]
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): def solve_a(data):
for i in range(length, len(data)): for i in range(25, len(data)):
number = data[i] number = data[i]
if not is_sum(number, data[i - length:i]): if not find_pair_sum(number, data[i-25:i]):
return number return number
def solve_b(number, data): def solve_b(number, data):
@@ -24,7 +41,7 @@ def solve_b(number, data):
data = [int(line.strip()) for line in open('input')] data = [int(line.strip()) for line in open('input')]
result = solve_a(data, 25) result = solve_a(data)
print(result) print(result)
print(solve_b(result, data)) print(solve_b(result, data))