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

heks

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

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 054
Баллы
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 090
Благодарностей
263
Баллы
83
спасибо
 
  • Спасибо
Реакции: djaga

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 054
Баллы
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)