74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
|
|
||
|
def all_singles():
|
||
|
return list(range(1, 21)) + [25]
|
||
|
|
||
|
|
||
|
def all_doubles():
|
||
|
return [n * 2 for n in range(1, 21)] + [50]
|
||
|
|
||
|
|
||
|
def all_triples():
|
||
|
return [n * 3 for n in range(1, 21)]
|
||
|
|
||
|
|
||
|
def euler_109():
|
||
|
count = 0
|
||
|
target_score = 100
|
||
|
for first in all_doubles():
|
||
|
# D
|
||
|
if first < target_score:
|
||
|
count += 1
|
||
|
|
||
|
# D T
|
||
|
for second in all_triples():
|
||
|
if first + second < target_score:
|
||
|
count += 1
|
||
|
# D D
|
||
|
for second in all_doubles():
|
||
|
if first + second < target_score:
|
||
|
count += 1
|
||
|
# D S
|
||
|
for second in all_singles():
|
||
|
if first + second < target_score:
|
||
|
count += 1
|
||
|
|
||
|
# D T D
|
||
|
for second in all_triples():
|
||
|
for third in all_doubles():
|
||
|
if first + second + third < target_score:
|
||
|
count += 1
|
||
|
# D T S
|
||
|
for second in all_triples():
|
||
|
for third in all_singles():
|
||
|
if first + second + third < target_score:
|
||
|
count += 1
|
||
|
# D D S
|
||
|
for second in all_doubles():
|
||
|
for third in all_singles():
|
||
|
if first + second + third < target_score:
|
||
|
count += 1
|
||
|
|
||
|
# D T T
|
||
|
for second in all_triples():
|
||
|
for third in all_triples():
|
||
|
if second >= third and first + second + third < target_score:
|
||
|
count += 1
|
||
|
|
||
|
# D D
|
||
|
for second in all_doubles():
|
||
|
for third in all_doubles():
|
||
|
if second >= third and first + second + third < target_score:
|
||
|
count += 1
|
||
|
# S S
|
||
|
for second in all_singles():
|
||
|
for third in all_singles():
|
||
|
if second >= third and first + second + third < target_score:
|
||
|
count += 1
|
||
|
return count
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
solution = euler_109()
|
||
|
print("e109.py: " + str(solution))
|
||
|
assert(solution == 38182)
|