Added 2020 (python)
This commit is contained in:
BIN
2020/9/__pycache__/prog.cpython-38.pyc
Normal file
BIN
2020/9/__pycache__/prog.cpython-38.pyc
Normal file
Binary file not shown.
1000
2020/9/input
Normal file
1000
2020/9/input
Normal file
File diff suppressed because it is too large
Load Diff
58
2020/9/prog.py
Normal file
58
2020/9/prog.py
Normal file
@ -0,0 +1,58 @@
|
||||
import yaml
|
||||
|
||||
def get_input(sample = False):
|
||||
with open('sample' if sample else 'input', 'r') as f:
|
||||
return [int(line) for line in f.readlines()]
|
||||
|
||||
|
||||
def get_preamble(data: list, size: int):
|
||||
preamble = {}
|
||||
|
||||
for i in range(size):
|
||||
x = data[i]
|
||||
for j in range(i + 1, size):
|
||||
y = data[j]
|
||||
preamble[(x, y)] = x + y
|
||||
|
||||
return preamble
|
||||
|
||||
def print_preamble(dic: dict):
|
||||
for keys, value in dic.items():
|
||||
print(f"{keys}: {value}")
|
||||
|
||||
def get_result(data: list, part = 1, sample = False):
|
||||
if part == 1:
|
||||
pre_size = 5 if sample else 25
|
||||
preamble = get_preamble(data, pre_size)
|
||||
|
||||
for i in range(pre_size, len(data)):
|
||||
|
||||
elem = data[i]
|
||||
|
||||
if elem not in preamble.values():
|
||||
return elem
|
||||
|
||||
elem_to_pop = data[i - pre_size]
|
||||
new_preamble = {}
|
||||
for keys, value in preamble.items():
|
||||
if elem_to_pop not in keys:
|
||||
new_preamble[keys] = value
|
||||
preamble = new_preamble
|
||||
|
||||
for p in range(i - pre_size + 1, i):
|
||||
elem_p = data[p]
|
||||
preamble[(elem, elem_p)] = elem_p + elem
|
||||
|
||||
else:
|
||||
objective = get_result(data, part = 1, sample = sample)
|
||||
for length in range(2, len(data)):
|
||||
for i in range(len(data) - length):
|
||||
tmp = data[i:i+length]
|
||||
if sum(tmp) == objective:
|
||||
return min(tmp) + max(tmp)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(get_result(get_input(), part = 2))
|
||||
|
20
2020/9/sample
Normal file
20
2020/9/sample
Normal file
@ -0,0 +1,20 @@
|
||||
35
|
||||
20
|
||||
15
|
||||
25
|
||||
47
|
||||
40
|
||||
62
|
||||
55
|
||||
65
|
||||
95
|
||||
102
|
||||
117
|
||||
150
|
||||
182
|
||||
127
|
||||
219
|
||||
299
|
||||
277
|
||||
309
|
||||
576
|
15
2020/9/test.py
Normal file
15
2020/9/test.py
Normal file
@ -0,0 +1,15 @@
|
||||
from prog import *
|
||||
|
||||
inp = get_input(sample = True)
|
||||
|
||||
size = 5
|
||||
|
||||
result_1 = get_result(inp, sample = True)
|
||||
expected_1 = 127
|
||||
|
||||
print(f"{result_1 = } {result_1 == expected_1}")
|
||||
|
||||
result_2 = get_result(inp, part = 2, sample = True)
|
||||
expected_2 = 62
|
||||
print(f"{result_2 = } {result_2 == expected_2}")
|
||||
|
Reference in New Issue
Block a user