Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 21
1

Задача: перебор всех вариантов/ парсинг

07.07.2022, 09:40. Показов 750. Ответов 1

Author24 — интернет-сервис помощи студентам
Доброго дня!
Задача: дано предложение, в предложении маркеры с возможными вариантами ответа. надо перечислить все возможные комбинации.

Что сделано: предложение разбивается, собирается массив с опциями, формируется шаблон с полным перечнем вариантов предложения. Но! сейчас на вывод поступают не все возможные варианты. Видимо в шаблоне есть куча повторов, которые потом выбрасываются множеством. Т.е. думаю, что проблема в части "assembly of an array of variants".
сейчас выходит:
0 A D F G.
1 A B E G.
2 B C H.
3 A C E G.
4 A B F G.
5 B D H.
6 A D E G.
7 A C F G.
8 B B H.

но уже всю голову сломал((( не получается корректно вывести, прошу помощи

я пробую решить через массивы (динамический вариант), но думаю, что есть еще вариант через регулярки или стек, если предложите такое решение, буду крайне благодарен

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from itertools import cycle, product
 
 
def fin_ned(buf, need):  # search of second needed symbol
    coun = 0
    for item in range(len(buf)):
        if buf[item] == need:
            coun += 1
            if coun == 2:
                return item
    return False
 
 
def get_next(mass):  # next_option
    for i in mass:
        yield i
 
 
def full_mass_of_options(array_of_options, count_of_options):  # creating an array of all options
    new_arr = []
    for item in array_of_options:
        cyc = cycle(item)
        new_arr.append([next(cyc) for i in range(count_of_options)])
    return new_arr
 
 
st = "{A|B} {B|C|D} {{E|F} G|H}."
 
array_of_options = []
arr = []
count_of_options = 1
number_of_substitutions = 0
 
# text splitting, search options
while "{" in st:
    if "{" in st[st.index('{') + 1:st.index('}')]:  # seach of nested structure
        array_of_options.append([submass for submass in st[fin_ned(st, '{') + 1:st.index('}')].split('|')])
        st = st[0:fin_ned(st, '{')] + str(number_of_substitutions) + st[st.index('}') + 1:len(st)]
        number_of_substitutions += 1
    else:
        array_of_options.append([submass for submass in st[st.index('{') + 1:st.index('}')].split('|')])
        st = st[0:st.index('{')] + str(number_of_substitutions) + st[st.index('}') + 1:len(st)]
        number_of_substitutions += 1
number_of_substitutions -= 1
 
# preparation of initial arrays
for item in array_of_options:
    count_of_options *= len(item)
array_of_options = full_mass_of_options(array_of_options, count_of_options)
full_sample = [st for item in range(count_of_options)]
 
# assembly of an array of variants
for itr in range(number_of_substitutions, -1, -1):
    gen = get_next(array_of_options[itr])
    for itm in range(count_of_options):
        if str(itr) in full_sample[itm]:
            full_sample[itm] = full_sample[itm].replace(str(itr), next(gen))
 
# final
for i in enumerate(set(full_sample)):
    print(*i)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2022, 09:40
Ответы с готовыми решениями:

Перебор всех возможных вариантов
Всем доброго дня! Имеется задача: из данного массива чисел найти сколькими способами можно...

Перебор всех возможных вариантов
Предположим, у меня есть список spisok = Как вывести все возможнеы комбинации длиной 3, те ...

Перебор всех вариантов
Всем привет! Это моя первая проблема, с которой хотелось бы поделиться. Проблема сложная, но...

Перебор всех вариантов
Доброго времени суток...помогите пожалуйста...а то уже мучаюсь не один день...есть такая задачка...

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он...

1
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 21
08.07.2022, 09:07  [ТС] 2
Вчера разобрался в чем проблема:
Функция full_mass_of_options создаёт массив со всеми возможными вариантами.
Сейчас она выдаёт массив по порядку, типа:
fh c a
gh d b
i e a
fh c b
gh d a
i e b
fh c a
gh d b
i e a
А нужен массив вида:
fh c a
gh c a
i c a
fh c a
gh c a
i c a
fh d a
gh d a
i d a
0
08.07.2022, 09:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.07.2022, 09:07
Помогаю со студенческими работами здесь

Задача на перебор вариантов
Помогите пожалуйста.Для заданного числа проверьте, является ли оно суммою квадратов двух чисел. ...

задача на перебор вариантов
входные данные два массива 1 массив содержит суммы к примеру array(6,6,8) 2-массив содержит...

Перебор всех возможных вариантов
Мне задали задачу, которую я не смог решить. Существует 6-ти знатный алфавит, и цель заключается в...

Перебор всех возможных вариантов
Доброго всем дня! Есть задача: На вход дается строка из символов '0' '1' и '2' длиной не...

Задача о рюкзаке (перебор вариантов)
извините, я бум бум Постановка задачи. В рюкзак загружаются предметы n различных типов (количество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru