Найти - Пользователи
Полная версия: Комбинаторика. Скобочные последовательности.
Начало » Центр помощи » Комбинаторика. Скобочные последовательности.
1
Losyara
Помогите найти k-тую в лексикографическом порядке правильную скобочную последовательность (Два типа - круглые и квадратные.) Без квадратных внутри круглых.
terabayt
Losyara
(2 типа скобок - () и ) без внутри ()
не понял, можно пример?
Losyara
terabayt
не понял,
Извиняюсь. Два типа - круглые и квадратные. Без квадратных внутри круглых.
terabayt
например есть строка
la[ba[g7(u8)og]fo]
и если в программе ввести 1, то выдаст
[ba[g7(u8)og]fo]
2 -
[g7(u8)og]
3 -
(u8)
4 и боьше - ошибка?
я правильно понял?
den4ik
(\([^\[\(]\S\))
Losyara
Вводится 2. Ответ: 2.
[ ] и ( )

Вводится 4. Ответ: 7.
 ( )[ ], [ ]( ), [ ( ) ], [ ][ ], ( ) ( ), [ [ ] ], ( ( ) ).   ( [ ] ) - не подходит. 
vax
Решение будет примерно таким (оптимизация и исправление багов - задача для самостоятельного творчества ):
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))
dimy44
Такой вариант
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))
terabayt
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]))
kamisama
terabayt
-*- Simple is better than complex -*-
что же ты делаешь, я клавиатуру чаем забрызгал
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB