Определение качества введённого пароля - C#
Формулировка задачи:
Помогите пожалуйста написать программу для задачи (срочно, чтоб было понятно, что делал первокурсник) )
Генератор паролей
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
После ряда утечек конфиденциальной информации общественность всерьез задумалась о том, какие пароли следует использовать. Например, пароль «11111» — простой и его не следует использовать. Но как определить, хороший ли пароль?
Фондом Стандартизации Бизнес-процессов было проведено исследование, показавшее, что хороший пароль должен быть достаточно длинным и содержать символы разных видов. Исследование показало, что в хорошем пароле должно быть ровно n символов. Пароль должен состоять из заглавных и строчных букв латинского алфавита и цифр и удовлетворять следующим требованиям:
в пароле должно быть хотя бы a заглавных букв;
в пароле должно быть хотя бы b строчных букв;
в пароле должно быть хотя бы c цифр;
в пароле не должно быть двух одинаковых идущих подряд символов.
Понимая, что пользователям будет некомфортно придумывать пароль, удовлетворяющий всем этим требованиям, работники Фонда решили написать программу, призванную помочь пользователям в этом деле.
Помогите Фонду, напишите программу, которая по заданным параметрам генерирует подходящий пароль.
Формат ввода
В первой строке входного файла задано целое число n — требуемая длина пароля (1 ≤ n ≤ 100). Во второй строке заданы неотрицательные целые числа a, b и c — минимальное необходимое число заглавных букв, строчных букв и цифр, соответственно (a + b + c ≤ n).
Формат вывода
В единственной строке выведите любой хороший пароль. Допустимо использовать только заглавные и строчные латинские буквы, а также цифры.
Решение задачи: «Определение качества введённого пароля»
textual
Листинг программы
static string[] alp = { "ABCDEFGHIJKLMNOPQARTUVWXYZ", "abcdefghijklmnopqrstuvwxyz", "0123456789" };
const int a = 3, b = 3, c = 4, n = 10;
static string GeneratePassword()
{
StringBuilder password = new StringBuilder();
Random r = new Random();
for (int i = 0; i<n; i++)
{
string alp1 = alp[r.Next(0, 3)];//Случайный выбор один из трех алфавитов
password.Append(alp1[r.Next(0, alp1.Length)]);//Случайный выбор буквы из алфавита
}
return password.ToString();
}
static string GenerateGoodPassword()
{
string pass = "";
if (n >= a + b + c)
{
while (pass.Count(x => char.IsUpper(x)) < a || pass.Count(x => char.IsLower(x)) < b || pass.Count(x => char.IsDigit(x)) < c)
{
pass = GeneratePassword();
}
}
else
throw new Exception("Сумма чисел a, b, c должны быть меньше или равен n");
return pass;
}