帮我完成Python 3.x的自我挑战

Ham*_*jan 8 python puzzle combinatorics python-3.x

这不是功课.

我看到这篇文章赞扬了Linq库以及组合工具的优点,我想我自己:Python可以用更易读的方式来做.

用Python轻拍半小时后,我失败了.请在我离开的地方完成.另外,请以最恐怖和最有效的方式来做.

from itertools import permutations
from operator import mul
from functools import reduce
glob_lst = []
def divisible(n): return (sum(j*10^i for i,j in enumerate(reversed(glob_lst))) % n == 0)
oneToNine = list(range(1, 10))
twoToNine = oneToNine[1:]
for perm in permutations(oneToNine, 9):
    for n in twoToNine:
        glob_lst = perm[1:n]
        #print(glob_lst)
        if not divisible(n):
            continue
    else:
        # Is invoked if the loop succeeds
        # So, we found the number
        print(perm)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mar*_*son 23

这是一个简短的解决方案,使用itertools.permutations:

from itertools import permutations

def is_solution(seq):
    return all(int(seq[:i]) % i == 0 for i in range(2, 9))

for p in permutations('123456789'):
    seq = ''.join(p)
    if is_solution(seq):
        print(seq)
Run Code Online (Sandbox Code Playgroud)

我故意省略了1和9的可分性检查,因为它们总会得到满足.