Skip to content

Commit 64eea61

Browse files
committed
Add Day9 solution
1 parent 3830afe commit 64eea61

File tree

3 files changed

+1060
-0
lines changed

3 files changed

+1060
-0
lines changed

day9/day9.py

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
preamb_len=25
2+
3+
def find_incorrect_number(number, numbers):
4+
for index,nr in enumerate(numbers):
5+
for nr_2 in numbers[index+1:]:
6+
if nr + nr_2 == number:
7+
return 0
8+
return number
9+
10+
# Original solution
11+
def find_summing_set(number, numbers):
12+
for startindex, _ in enumerate(numbers):
13+
for endindex in range(startindex+1, len(numbers)):
14+
if sum(numbers[startindex: endindex]) == number:
15+
return numbers[startindex: endindex]
16+
return (0)
17+
18+
# Molto più veloce!
19+
# Dynamic programming solution
20+
def find_summing_set_dynamic(number, numbers):
21+
size = len(numbers)
22+
dp_matrix = [[-1+int(x==y) for x in range(size)] for y in range(size)]
23+
for startindex in range(0,size):
24+
for endindex in range(startindex+1,size):
25+
dp_matrix[startindex][endindex] = dp_matrix[startindex][endindex-1] + numbers[endindex]
26+
if dp_matrix[startindex][endindex] == number:
27+
return numbers[startindex: endindex]
28+
return (0)
29+
30+
31+
def main():
32+
f=open("input", "r")
33+
lines=[int(l.strip()) for l in f.readlines()]
34+
for i, line in enumerate(lines[preamb_len:]):
35+
incorrect_nr = find_incorrect_number(line, lines[i:i+preamb_len])
36+
if incorrect_nr:
37+
print("incorrect number found: " + str(incorrect_nr))
38+
summing_set = find_summing_set_dynamic(incorrect_nr, lines[0:i+preamb_len])
39+
print("weakness: "+str(max(summing_set) + min(summing_set)))
40+
main()

0 commit comments

Comments
 (0)