-
Notifications
You must be signed in to change notification settings - Fork 0
/
p105.py
58 lines (41 loc) · 1.58 KB
/
p105.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
with open('p105_sets.txt', 'r') as f:
lines = f.readlines()
sets = []
for line in lines:
sets.append(sorted([int(n) for n in line.split(",")]))
print(sets[:5])
def condition_i(number_set):
A = []
B = []
return recursively_check_condition_i(A, B, number_set)
def recursively_check_condition_i(A, B, numbers_unused):
if not numbers_unused:
if A and B:
if sum(A) == sum(B):
return False
return True
A_copy = [el for el in A]
B_copy = [el for el in B]
numbers_unused_copy = [el for el in numbers_unused]
next_number = numbers_unused_copy.pop()
A_copy_with_new_element = [el for el in A_copy]
A_copy_with_new_element.append(next_number)
B_copy_with_new_element = [el for el in B_copy]
B_copy_with_new_element.append(next_number)
return recursively_check_condition_i(A_copy_with_new_element, B_copy, numbers_unused_copy) \
and recursively_check_condition_i(A_copy, B_copy_with_new_element, numbers_unused_copy) \
and recursively_check_condition_i(A_copy, B_copy, numbers_unused_copy)
def condition_ii(number_set):
total_elems = len(number_set)
small_subset_size = 1
while 2*small_subset_size + 1 <= total_elems:
bigger_subset_size = small_subset_size + 1
if sum(number_set[:bigger_subset_size]) < sum(number_set[-small_subset_size:]):
return False
small_subset_size = small_subset_size + 1
return True
TOTAL = 0
for _set in sets:
if condition_i(_set) and condition_ii(_set):
TOTAL = TOTAL + sum(_set)
print(TOTAL)