как отличить хороший курс от плохого? Есть ли критерии оценивания?
from itertools import chain, permutations
import re
def main(s):
t = tuple(filter(str.isdigit, s))
le, alldigitscnt = len(t), [0] * 10
for d in t:
alldigitscnt[ord(d) - 48] += 1
n = min(filter(None, alldigitscnt))
if n > 2 and not any(c % n for c in alldigitscnt):
return print(repr(s), *[''.join(chr(57 - i) * (c // n) for i, c in enumerate(alldigitscnt[::-1]))] * n)
zero_head_str = re.compile(r'0\d+').match
for parts in range(le, 2, -1):
maxW, gaps = le // parts + bool(le % parts), parts - 1
for maxS in map(''.join, permutations(t, maxW)):
if zero_head_str(maxS):
continue
maxN = int(maxS)
taildigitscnt = alldigitscnt[:]
for d in maxS:
taildigitscnt[ord(d) - 48] -= 1
taildigits = ''.join(chain.from_iterable(chr(i) * w for i, w in enumerate(taildigitscnt, 48)))
for minw in range(1, min(le // parts, (le - maxW) // gaps) + 1):
for minS in map(''.join, permutations(taildigits, minw)):
if zero_head_str(minS):
continue
minN = int(minS)
if maxN <= minN:
continue
diff = maxN - minN
middigitscnt = taildigitscnt[:]
for d in minS:
middigitscnt[ord(d) - 48] -= 1
if diff % gaps:
continue
def chk(step):
tmp = middigitscnt[:]
for x in range(minN + step, maxN, step):
for d in str(x):
x = ord(d) - 48
if not tmp[x]:
return False
tmp[x] -= 1
return not any(tmp)
if chk(diff // gaps):
return print(repr(s), *[minN + diff // gaps * i for i in range(gaps + 1)])
print(f'{s!r} ups:(((')
S = '0123456789' * 2
for J in range(3, len(S) + 1):
main(S[:J])
12 – две цифры, две перестановки.
112 – две цифры, три перестановки.
для всех перестановок в строке длинной 15 символов, которых 1307674368000
можно ли из заданных цифр составить последовательность чисел, являющуюся арифметической прогрессией.
да, как и с отрицательным, по определению арифметической прогрессии
последовательность строиться из цифр, поэтому будет только возрастающей, либо статичной.
для всех перестановок в строке длинной 15 символов, которых 1307674368000 штук