С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 09.11.2019
Сообщений: 7

Массив строк со всему возможными размещениями точек между букв

30.08.2020, 13:03. Показов 6608. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно написать скрипт, который на вход принимает строку,
на выход отдает массив строк со всеми возможными размещениями точек между букв.
Например:
Code
1
2
> abc
[ ‘abc’, ‘a.bc’, ‘ab.c’, ‘a.b.c]
Я написала вот такой скрипт, но у меня выводит все возможные комбинации только с одной точкой, а нужно еще с двумя, как в примере. Как это реализовать?

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function permute(str) {
    const ret = [];
 
    if (str.length === 1) return [str];
    if (str.length === 2) return [str, str[1] + str[0]];
 
    str.split('').forEach(function (chr, idx, arr) {
        let sub = [].concat(arr);
        sub.splice(idx, 1);
        permute(sub.join('')).forEach(function (perm) {
            ret.push(chr + perm);
        });
    });
 
    return ret;
}
 
console.log(permute('ab.c'));
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.08.2020, 13:03
Ответы с готовыми решениями:

Найти наибольшее из расстояний между всеми возможными парами вершин
Для многоугольника, заданного координатами вершин, найти наибольшее из расстояний между всеми возможными парами вершин.

Найти наибольшее из расстояний между всеми возможными парами вершин многоугольника
Не могу никак решить задачу: Для многоугольника, заданного координатами вершин, найти наибольшее из расстояний между всеми возможными...

Найти наибольшее из расстояний между всеми возможными парами вершин многоугольника
Доброго времени суток! Мне нужно решить задачу на Delphi до конца недели, я сам делал, пытался, но почему-то не получается( мб я глупый, мб...

8
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
30.08.2020, 13:24
Положу начало:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function permute(str) {
  let ret = [];
  if (str.length <= 1) {
    return [str];
  }
  for (let el of permute(str.slice(1))) {
    ret.push(str[0] + el);
    ret.push(str[0] + "." + el);
  }
  return ret;
}
0
Эксперт JS
 Аватар для Iverycool
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
30.08.2020, 23:54
Лучший ответ Сообщение было отмечено Iverycool как решение

Решение

pol_li, DrType, не могу не вспомнить одну из довольно не маленьких написанных мною на этом форуме "программ", а именно make-hudred. Это была очень хорошая задача, практически про все виды переборов. Советую разобрать.

Так вот прямо из той задачи можно чуточку изменить функцию makeSplits про именно вашу пермутацию(2^n), вот результат(к тому же короткий):
JavaScript
1
2
3
4
5
6
7
8
function permutePunc(str) {
  const characters = str.split('');
  return new Array(2 ** ((str.length || 1) - 1)).fill(0).map((_, i) =>
    [...i.toString(2).padStart(str.length - 1, '0')].reduce((variant, el, i) =>
      variant + ((el == 0) ? '' : '.') + (str[i + 1] || ''), str[0] || ''));
}
 
console.log(permutePunc('abc'));
Вот чуть более подробно:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function permutePunc(str) {
  const characters = str.split('');
  const variants = [];
  for (let i = 0; i < 2 ** (str.length - 1); i++) {
    let variant = str[0] || '';
    [...i.toString(2).padStart(str.length - 1, '0')].forEach((el, i) => {
      variant += ((el == 0) ? '' : '.') + (str[i + 1] || '');
    });
    variants.push(variant);
  }
  return variants;
}
 
console.log(permutePunc('abc'));
2
0 / 0 / 0
Регистрация: 01.09.2020
Сообщений: 4
08.09.2020, 13:27
Добавлено через 3 минуты
Iverycool Здравствуйте , а подскажите пожалуйста в " i < 2 ** (str.length - 1) "
что значит "2" ?
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
08.09.2020, 14:24
anti_p, i меньше 2 в степени (длина строки - 1).
Возведение в степень.
0
0 / 0 / 0
Регистрация: 01.09.2020
Сообщений: 4
08.09.2020, 18:53
j2FunOnly это понятно , вопрос что именно цифра "2" значит , почему 2 другими словами ?
0
0 / 0 / 0
Регистрация: 01.09.2020
Сообщений: 4
08.09.2020, 19:01
Подскажите пожалуйста в коде из поста #3
в
JavaScript
1
 i < 2 ** (str.length - 1)
что значит цифра почему именно "2" ?
0
Эксперт JS
 Аватар для Iverycool
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
09.09.2020, 21:09
Цитата Сообщение от anti_p Посмотреть сообщение
что значит цифра почему именно "2" ?
Потому что, ваша задача - задача на комбинаторику, т.е. перестановку. Вам надо получить все возможные перестановки позиции точек в слове, а так как точка может "находится" всего в двух состояниях(поставлена и не поставлена), то и за основу взята двойка.
Без понимания основ комбинаторики вам тут делать нечего.
Комбинаторика
Перестановка
https://100task.ru/sample/114.aspx
1
0 / 0 / 0
Регистрация: 01.09.2020
Сообщений: 4
09.09.2020, 21:17
Iverycool Спасибо за ответ !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2020, 21:17
Помогаю со студенческими работами здесь

Графический режим: вывод точек по всему экрану за исключением круга заданного радиуса
Написать программу , которая выводила бы в графическом режиме на весь экран монитора , кроме круга с центром ( 200,200 ) и радиусом 80,...

Заполнить массив всеми возможными символами
Как добавить в массив чаров (букв), добавить все буквы, цифры, всё на свете. (Ну, кроме ТАБ, Бекспейс, пробелов и т.д.) Я так понял через...

Как заполнить массив всеми возможными комбинациями из 0 и 1?
Как заполнить массив из N элементов различными комбинациями из 1 и 0

Массив: Найти номера пары точек, расстояние между которыми наименьшее
Даны координаты n точек на плоскости: (X1, Y1), ...,(Xn, Yn) (n ≤ 30). Найти номера пары точек, расстояние между которыми наименьшее...

Вывести массив, используя указатели, максимально возможными способами
#include &lt;iostream&gt; using namespace std; void main() { const int SIZE = 10; int A = { 1,2,3,4,5,6,7,8,9,10 }; int* p = A; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru