0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
|
|
1 | |
Найти все сочетания с повторениями из букв A, B, C, D заданного размера29.01.2018, 15:31. Показов 6670. Ответов 18
Как написать следующую функцию на с++?
def possible_variants(k): return [''.join(x) for x in product('ABCD', repeat=k)] То есть найти все сочетания с повторениями из букв A, B, C, D размером k. Например, при k=2: AA AB AC AD BB и т.д.
0
|
29.01.2018, 15:31 | |
Ответы с готовыми решениями:
18
Сочетания с повторениями Сочетания с повторениями Найти в списке из 7 слов все слова, состоящие из заданного количества букв Привести в порядке возрастания все r-сочетания с повторениями элементов множества {1, 2, ., n} и определить их количество |
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
|
|
29.01.2018, 15:40 [ТС] | 3 |
itertools.product(*iterables[, repeat])
Cartesian product of input iterables. Roughly equivalent to nested for-loops in a generator expression. For example, product(A, B) returns the same as ((x,y) for x in A for y in B). The nested loops cycle like an odometer with the rightmost element advancing on every iteration. This pattern creates a lexicographic ordering so that if the input’s iterables are sorted, the product tuples are emitted in sorted order.
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
29.01.2018, 16:16 | 4 | |||||
Я только такое смог придумать
1
|
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
|
|
29.01.2018, 16:20 [ТС] | 5 |
но эта программа не сработает, если k больше 4 )) (c повторениями же)
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
29.01.2018, 16:31 | 6 |
0
|
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
|
|
29.01.2018, 16:33 [ТС] | 7 |
это да) но нужно размера k, вот в чем загвоздка(
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
29.01.2018, 16:37 | 8 |
Когда k больше 4-х то все сработает как k==4
0
|
596 / 288 / 178
Регистрация: 06.06.2016
Сообщений: 549
|
||||||
29.01.2018, 17:46 | 9 | |||||
Сообщение было отмечено Valeriiia как решение
Решение
1
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
||||||
29.01.2018, 18:30 | 10 | |||||
По-простому надо просто перебрать все числа в 4-ичной системе счисления определенной (k) длины...
Для проверки - число комбинаций = 4k. Если буков не 4, а скажем, 5, надо в предыдущем тексте "4" заменить на "5" и так далее и тому подобное... Добавлено через 9 минут Что-нибудь в таком духе
1
|
║XLR8║
|
||||||
29.01.2018, 21:51 | 11 | |||||
Valeriiia, если переводить из питона тогда и итераторы реализовать. 100 лет на плюсах не писал, на быструю руку вот что вышло:
- избавиться от product_ptr (std::shared_ptr использовать или std::week_ptr) - избавиться от product.length параметра который не константный в пользу вектора итераторов и переписать product::iterator.operator* с использованием другого подхода. Если кто из старожил заглянет, прокоментируйте код, пожалуйста.
1
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
29.01.2018, 22:15 | 12 |
Сообщение было отмечено Valeriiia как решение
Решение
Valeriiia, перечитывая тему, закрались у меня сомнения. Порядок букв важен? То есть AABB и BBAA, ABBA - это разные комбинации? Если разные, тогда мое решение рулит. Если они все считаются за одну, тогда нужен другой алгоритм.
Добавлено через 13 минут Тогда задача сводится к нахождению всех целых неотрицательных решений уравнения x1 + x2 + x3 + x4 = k Где-то на форуме такая задача уже была... Добавлено через 2 минуты Число таких комбинаций находится по формуле Ck+m-1m-1, m=4
1
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
||||||
29.01.2018, 22:17 | 13 | |||||
0
|
║XLR8║
|
|
29.01.2018, 22:27 | 14 |
Байт, вот дока питона, там есть псевдореализация product https://docs.python.org/3/libr... ls.product
А вот описание того, что она делает: https://en.wikipedia.org/wiki/Cartesian_product
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
29.01.2018, 23:40 | 15 | |||||
Вот, универсальная. Можно передавать саму строку, а можно и не передавать, это лучшее что смог придумать
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
29.01.2018, 23:57 | 16 |
Понимаете, меня не так уж интересует конкретное решение, мне интересно свои косточки поразмять. В этот раз, кажется, не сложилось, я разминался на другой задаче. В свое оправдание могу сказать, что стартовый топик не совсем точно описал ситуацию, а на вопрос в посте 12 ТС пока не ответил. Особых претензий в этом смысле не имею, многозначность трактовок тут встречается сплошь и рядом, и это даже интересно, оттрактовать ее тем или иным образом. В конце концов это приводит к нескольким задачам, каждую из которых может быть решать интересно.
Ваше решение, вполне возможно, что и блистательное, смотреть не стал из соображений, изложенных выше. Всем - удачи! Добавлено через 3 минуты Пятая строка стартового примера конечно могла навести на мысль, что когда есть АВ, ВА уже никого не интересует. Но я не проинтуичил, увы!
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
29.01.2018, 23:59 | 17 |
alex white, Только сейчас заметил твой пример Чувствую себя копипастой )
0
|
║XLR8║
|
||||||
30.01.2018, 00:20 | 18 | |||||
Сообщение было отмечено Valeriiia как решение
Решение
Байт, 101 строка блистательности на итераторах
Код
$ g++ -o run run.cpp -std=gnu++11 $ ./run Ax Ay Bx By Cx Cy Dx Dy 000 001 010 011 100 101 110 111
2
|
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
|
|
30.01.2018, 13:21 [ТС] | 19 |
Байт, порядок важен. Ваше решение шикарное, полностью подходит. И еще прямо точно как в питоне реализовано! Спасибо большое!
Добавлено через 3 минуты outoftime, спасибо большое! Очень красиво!
0
|
30.01.2018, 13:21 | |
30.01.2018, 13:21 | |
Помогаю со студенческими работами здесь
19
Найти и заменить в строке все сочетания «ab» на сочетания «bb» Сочетания с r повторениями сочетания с повторениями Сочетания с повторениями в лексикологическом порядке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |