Как сгенерировать все возможные строки со всеми символами ascii определенной длины - PullRequest
0 голосов
/ 09 декабря 2018

Сегодня я немного боролся, пытаясь создать функцию, которая могла бы генерировать все возможные строки со всеми возможными ascii-символами, вплоть до определенной длины.

Итак, по сути, сначала один символот 0 до 255Затем два, где я получаю AA, затем AB, затем AC ... и т. Д. (Но используя коды символов ascii, чтобы получить все возможные значения в каждом месте).
Имеет ли это смысл?

Я полагаю, яотстой в рекурсии, потому что каждая попытка, которую я делаю, либо становится слишком сложной для меня, чтобы понять это, либо заканчивается только увеличением последней позиции в моей строке.

Я полностью застрял здесь и потерял весь обзоро том, что я делаю.
Я пытался гуглить безрезультатно, обычно заканчивая теми же статьями, которые, кажется, не совсем та же проблема.

Я буду счастливлюбые примеры, это не обязательно должен быть javascript.

Помогите мне stackoverflow, вы моя единственная надежда.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Полагаю, я отстой в рекурсии

Вы, похоже, ищете рекурсивное решение.

Может ли этот псевдокод решить вашу проблему?

F(n)
    if (n == 1)
        return asciiCharacters

    suffixes = F(n - 1)

    for each character of asciiCharacters
        for each suffix of suffixes
            results.push(character + suffix)

    return results

где asciiCharacters - массив символов ASCII.

0 голосов
/ 09 декабря 2018

Вы можете использовать генератор, который рекурсивно формирует строку и возвращает результаты вызывающей стороне:

  function* chars() {
    for(let i = 0; i < 255; i++) 
      yield String.fromCharCode(i);
  }

 function* combinations(length, previous = "") {
   if(length <= 0) {
      yield previous;
      return;
   }

   for(const char of chars())
      yield* combinations(length - 1, previous + char);
}

Таким образом, вы можете получить все комбинации как:

  const result = [...combinations(5)];

Обратите внимание, что 255 ** n много, поэтому вы можете использовать комбинации один за другим:

  const timer = ms => new Promise(res => setTimeout(res, ms));

  (async function() {
     for(const combo of combinations(5)) {
       console.log(combo);
       await timer(1);
     }
 })();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...