Losyaraне понял, можно пример?
(2 типа скобок - () и ) без внутри ()
terabaytИзвиняюсь. Два типа - круглые и квадратные. Без квадратных внутри круглых.
не понял,
la[ba[g7(u8)og]fo]
[ba[g7(u8)og]fo]
[g7(u8)og]
(u8)
(\([^\[\(]\S\))
[ ] и ( )
( )[ ], [ ]( ), [ ( ) ], [ ][ ], ( ) ( ), [ [ ] ], ( ( ) ). ( [ ] ) - не подходит.
def filter_f(var): open_l = set('[(') if var[0] not in open_l: return False if var[-1] in open_l: return False kvadrat_i = 0 circle_i = 0 for index, item in enumerate(var): if item == '[': if circle_i <= 0: kvadrat_i += 1 else: return False elif item == ']': if var[index-1] == '(': return False kvadrat_i -= 1 elif item == '(': circle_i += 1 elif item == ')': circle_i -= 1 if kvadrat_i < 0 or circle_i < 0: return False if kvadrat_i != 0 or circle_i != 0: return False return True def calc(num): vars = itertools.product(('[',']','(',')'), repeat=num) return list(filter(filter_f, vars)) def calc2(num): vars = itertools.product(('[',']','(',')'), repeat=num) return [''.join(var) for var in filter(filter_f, vars)] print(calc(4))
import itertools def foo(num): lst = [] if num <= 0 or num % 2: return lst for i in itertools.product(('[',']','(',')'), repeat=num): i = ''.join(list(i)) try: assert i.find('([') == i.find('])') == -1 eval(i.replace(')(', '),(').replace('][', '],[').replace('](', '],(').replace(')[', '),[')) lst.append(i) except: pass return lst res = foo(6) print(len(res)) print(', '.join(res))
n, l = 6, [''] for k in range(n/2): l = reduce(lambda x,y: x+y, reduce(lambda x,y: x+y, [[[(i[:j] + h + i[j:]) for h in ['[]', '()']] for j in range(len(i)+1)] for i in l])) n = filter(lambda x: '([' not in x and '])' not in x,set(l)) print(str(len(n)) + '\n' + ', '.join([i for i in n]))
terabaytчто же ты делаешь, я клавиатуру чаем забрызгал
-*- Simple is better than complex -*-