52 lines
1.1 KiB
Python
52 lines
1.1 KiB
Python
from itertools import product, islice
|
|
|
|
|
|
def expr(p):
|
|
return "{}1{}2{}3{}4{}5{}6{}7{}8{}9".format(*p)
|
|
|
|
|
|
def gen_expr():
|
|
op = ['+', '-', '']
|
|
return [expr(p) for p in product(op, repeat=9) if p[0] != '+']
|
|
|
|
|
|
def all_exprs():
|
|
values = {}
|
|
for expr in gen_expr():
|
|
val = eval(expr)
|
|
if val not in values:
|
|
values[val] = 1
|
|
else:
|
|
values[val] += 1
|
|
return values
|
|
|
|
|
|
def sum_to(val):
|
|
for s in filter(lambda x: x[0] == val, map(lambda x: (eval(x), x), gen_expr())):
|
|
print(s)
|
|
|
|
|
|
def max_solve():
|
|
print("Sum {} has the maximum number of solutions: {}".
|
|
format(*max(all_exprs().items(), key=lambda x: x[1])))
|
|
|
|
|
|
def min_solve():
|
|
values = all_exprs()
|
|
for i in range(123456789):
|
|
if i not in values:
|
|
print("Lowest positive sum that can't be expressed: {}".format(i))
|
|
return
|
|
|
|
|
|
def highest_sums(n=10):
|
|
sums = map(lambda x: x[0],
|
|
islice(sorted(all_exprs().items(), key=lambda x: x[0], reverse=True), n))
|
|
print("Highest Sums: {}".format(list(sums)))
|
|
|
|
|
|
sum_to(100)
|
|
max_solve()
|
|
min_solve()
|
|
highest_sums()
|