Сгенерировать все возможные строки в 7 символов из циферно-буквенного ряда

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Добрый день форум. Подскажите, куда взглянуть чтобы найти ответ на следующий вопрос
Необходимо сгенерировать список строк в записью в лист .
Сгенеренные строки необходимы такого вида
Hmax4rD
Hw8ESkT
J1J4aCU
J9D18fN
JHRjYHu
JMe5r9h
То еть строки содержащие весь латинский алфавит в верхнем и нижнем регистре, а также цифры от 1 до 9 (без нуля)
Ни в какой системе счисления и кодировках не уловил никакого алгоритма и последовательностей из чего сделал вывод что данная генерация рандомна
На выходе в списке вижу так - StringBuilder result = "текстовое значение" + "сгенерированое значение"
Спасибо
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 737
Благодарностей
1 131
Баллы
113
Как вариант на кубиках.
 

Вложения

  • 17 КБ Просмотры: 48
  • Спасибо
Реакции: DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Как вариант на кубиках.
К сожалению не подходит рандом. Нужен последовательный перебор всех символов, точнее все возможные комбинации без пропусков, с рандомом - это проиграшная лотерея
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 737
Благодарностей
1 131
Баллы
113
Это называется - прямой перебор. Кубиками такое не нарисуешь. Спроси в профильных темах, может кто нарисует на C#
 
  • Спасибо
Реакции: DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Написал код

C#:
using (var writer = new StreamWriter(new BufferedStream(File.OpenWrite(@"C:\Users\MayerskCo\Desktop\tails.txt"), 10 * 1024 * 1024))){
string[] a_s={ "1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","k","l","m","n","o","p","q","r","s","t","v","x","y","z","A","B","C","D","E","F","G","H","I","K","L","M","N","O","P","Q","R","S","T","V","X","Y","Z"};
      ulong  m = 55, n = 7;
      for(ulong i = 0; i < Math.Pow(m, n); i++)
      {
        string s = "";
        ulong ii = i;
        for (ulong j = 0; j < n; j++)
        {
          s = a_s[ii % m]+s;
          ii /= m;
        }
       // project.SendInfoToLog(s);
        writer.WriteLine(s);
      }
}
Но он начинает падать как только значение в счетчике внутри скрипта подходит к максимальному в Int32 -подскажите как расширить это значение в коде
Спасибо
PS По подсказкам товарищей сфорума поправил скрипт и теперь это рабочий код, может генерить до 10 знаков в строку из указанных 55 символов
Имейте ввиду что это 55^10 и количество значений 253 295 162 119 140 625 строк что при объеме строки в 10 байт составит 2249 Петабайта :-)

Вычисления приблизительные
 
Последнее редактирование:

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 315
Благодарностей
869
Баллы
113
Long
 
  • Спасибо
Реакции: DevOps

K R

Client
Регистрация
14.01.2017
Сообщения
130
Благодарностей
133
Баллы
43
Набросал шаблон на кубиках. Не так красиво конечно как можно было бы сделать на C#, но я пока не обладаю достаточным опытом для быстрого написания шаблона на шарпе.
 

Вложения

  • Спасибо
Реакции: DevOps

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 302
Благодарностей
702
Баллы
113
Написал код

C#:
  using (var writer = new StreamWriter(new BufferedStream(File.OpenWrite(@"C:\Users\MayerskCo\Desktop\tails.txt"), 10 * 1024 * 1024))){
string[] a_s={ "1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","k","l","m","n","o","p","q","r","s","t","v","x","y","z","A","B","C","D","E","F","G","H","I","K","L","M","N","O","P","Q","R","S","T","V","X","Y","Z"};
      int m = 55, n = 7;
      for(int i = 0; i < Math.Pow(m, n); i++)
      {
        string s = "";
        int ii = i;
        for (int j = 0; j < n; j++)
        {
          s = a_s[ii % m]+s;
          ii /= m;
        }
       // project.SendInfoToLog(s);
        writer.WriteLine(s);
      }
}
Но он начинает падать как только значение в счетчике внутри скрипта подходит к максимальному в Int32 -подскажите как расширить это значение в коде
Спасибо
Используй ulong

95328
 
  • Спасибо
Реакции: DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
554
Благодарностей
1 136
Баллы
93
Написал код

C#:
using (var writer = new StreamWriter(new BufferedStream(File.OpenWrite(@"C:\Users\MayerskCo\Desktop\tails.txt"), 10 * 1024 * 1024))){
string[] a_s={ "1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","k","l","m","n","o","p","q","r","s","t","v","x","y","z","A","B","C","D","E","F","G","H","I","K","L","M","N","O","P","Q","R","S","T","V","X","Y","Z"};
      ulong  m = 55, n = 7;
      for(ulong i = 0; i < Math.Pow(m, n); i++)
      {
        string s = "";
        ulong ii = i;
        for (ulong j = 0; j < n; j++)
        {
          s = a_s[ii % m]+s;
          ii /= m;
        }
       // project.SendInfoToLog(s);
        writer.WriteLine(s);
      }
}
Но он начинает падать как только значение в счетчике внутри скрипта подходит к максимальному в Int32 -подскажите как расширить это значение в коде
Спасибо
PS По подсказкам товарищей сфорума поправил скрипт и теперь это рабочий код, может генерить до 10 знаков в строку из указанных 55 символов
Имейте ввиду что это 55^10 и количество значений 253 295 162 119 140 625 строк что при объеме строки в 10 байт составит 2249 Петабайта :-)

Вычисления приблизительные
Хм, вы уже решили...)

Надеюсь тогда остальным мой пример будет полезен или хотябы инетересен.) Ну и конечно, пожалуйста, нажмите "спасибо". :bu:
Генерация рандомной строки на основе списка:
int howManyLines = 10;                // сколько строк сгенерировать? 10?
int howManyCharactersAreInString = 7; // сколько в строке символов?

Random rand = new Random((int)(DateTime.Now.Ticks & (0x0000FFFF + DateTime.Now.Millisecond)));
for (int i = 0; i < howManyLines; i++)
{
    string res = RandomStr(rand, howManyCharactersAreInString); // вызов локальной функции
    project.SendInfoToLog(res);                                 // вывод в лог, для примера
    project.Lists["lines"].Add(res);                            // запись в список *Не забыть создать список с именем lines
}

string RandomStr(Random r, int howManyCharacters = 7)
{
    List<string> enumeration = new List<string>()
        { "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "v", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "V", "X", "Y", "Z" };
    string res = string.Empty;
    for (int i = 0; i < howManyCharacters; i++)
        res += enumeration[r.Next(0, enumeration.Count)];
    return res;
}
Пример результата: [кликабельно]
1659447045475.png

Ниже приложил шаблон ↓:
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Sanya330 и DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Хм, вы уже решили...)

Надеюсь тогда остальным мой пример будет полезен или хотябы инетересен.) Ну и конечно, пожалуйста, нажмите "спасибо". :bu:

Генерация рандомной строки на основе списка:
int howManyLines = 10; // сколько строк сгенерировать? 10?
int howManyCharactersAreInString = 7; // сколько в строке символов?

Random rand = new Random((int)(DateTime.Now.Ticks & (0x0000FFFF + DateTime.Now.Millisecond)));
for (int i = 0; i < howManyLines; i++)
{
    string res = RandomStr(rand, howManyCharactersAreInString); // вызов локальной функции
    project.SendInfoToLog(res); // вывод в лог, для примера
    project.Lists["lines"].Add(res); // запись в список *Не забыть создать список с именем lines
}

string RandomStr(Random r, int howManyCharacters = 7)
{
    List<string> enumeration = new List<string>()
        { "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "v", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "V", "X", "Y", "Z" };
    string res = string.Empty;
    for (int i = 0; i < howManyCharacters; i++)
        res += enumeration[r.Next(0, enumeration.Count)];
    return res;
}
Пример результата: [кликабельно]
Посмотреть вложение 95337

Ниже приложил шаблон ↓:
Для одного из моих проектов Ваш код подходит, спасибо за проделанную работу! :bt:
 
  • Спасибо
Реакции: djaga

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)