Сгенерировать все варианты текста из 5 символов

heks

Client
Регистрация
01.10.2013
Сообщения
1 205
Благодарностей
317
Баллы
83
Нужно сгенерировать текст из 5 символов из маленьких английских букв, больших английских букв и цифр. Видел где то на C# тут код но найти не могу.
Заранее спасибо. нужны все варианты текстов которые можно сгенерировать. Знаю что будет много но это нужно.
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
551
Благодарностей
1 131
Баллы
93
Нужно сгенерировать текст из 5 символов из маленьких английских букв, больших английских букв и цифр. Видел где то на C# тут код, но найти не могу.
Заранее спасибо. Нужны все варианты текстов которые можно сгенерировать. Знаю что будет много, но это нужно.
Например, так:
Сгенерировать n количество рандомных паролей в список с удалением дублей:
int size = 5; // длина пароля
string alphabet = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
int howMany = 5000000; // количество сгенерированных паролей

List<string> list = new List<string>();
for(int i = 0; i < howMany; i++)
    list.Add(TextProcessing.RandomText(size, "s", alphabet));

list.Distinct(); // удалить дубли
project.SendInfoToLog($"Удалено дублей: {num - list.Count}", false);
project.Lists["Варианты"].AddRange(list); // имя списка в PM "Варианты"
Приложил проект для наглядности:
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: dgreen, material и heks

heks

Client
Регистрация
01.10.2013
Сообщения
1 205
Благодарностей
317
Баллы
83
спасибо
 
  • Спасибо
Реакции: djaga

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
551
Благодарностей
1 131
Баллы
93
Например, так:
Сгенерировать n количество рандомных паролей в список с удалением дублей:
int size = 5; // длина пароля
string alphabet = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
int howMany = 5000000; // количество сгенерированных паролей

List<string> list = new List<string>();
for(int i = 0; i < howMany; i++)
    list.Add(TextProcessing.RandomText(size, "s", alphabet));

list.Distinct(); // удалить дубли
project.SendInfoToLog($"Удалено дублей: {num - list.Count}", false);
project.Lists["Варианты"].AddRange(list); // имя списка в PM "Варианты"
Приложил проект для наглядности:
Обратил внимание, что в моем коде ошибка. Не возвращается список после удаления дублей.
Спасибо, @dgreen

Рабочий:
C#:
int size = 5; // длина пароля
string alphabet = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
int howMany = 5000000; // количество сгенерированных паролей

List<string> list = new List<string>();
for(int i = 0; i < howMany; i++)
    list.Add(TextProcessing.RandomText(size, "s", alphabet));

list = list.Distinct().ToList(); // удалить дубли
project.SendInfoToLog($"Удалено дублей: {howMany - list.Count}\nВсего: {list.Count}", false);
project.Lists["Варианты"].AddRange(list); // имя списка в PM "Варианты"
Ещё варианты:

С помощью LINQ:
C#:
int size = 5;
string alphabet = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
int howMany = 5000000;

List<string> list = Enumerable.Range(0, howMany)
    .Select(_ => TextProcessing.RandomText(size, "s", alphabet))
    .Distinct()
    .ToList();

project.SendInfoToLog($"Удалено дублей: {howMany - list.Count}\nВсего: {list.Count}", false);
project.Lists["Варианты"].AddRange(list);
Многопоточный вариант с помощью PLINQ:

Подключить using'и:
using System.Threading.Tasks;
using System.Collections.Concurrent;


C#:
int size = 5;
string alphabet = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
int howMany = 5000000;
int numThreads = Environment.ProcessorCount;

ConcurrentBag<string> bag = new ConcurrentBag<string>();

Parallel.ForEach(Partitioner.Create(0, howMany), new ParallelOptions { MaxDegreeOfParallelism = numThreads },
    range => Enumerable.Range(range.Item1, range.Item2 - range.Item1)
        .Select(_ => TextProcessing.RandomText(size, "s", alphabet))
        .Distinct()
        .ToList()
        .ForEach(bag.Add));

List<string> list = bag.ToList();

project.SendInfoToLog($"Удалено дублей: {howMany - list.Count}\nВсего: {list.Count}", false);
project.Lists["Варианты"].AddRange(list);
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Sho, avlba и dgreen

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