Answer

Answer

t.me/js_test

Ответ:

function generatePassword() {
  const numbers = "0123456789",
    upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
    lowerChars = "abcdefghijklmnopqrstuvwxyz",
    symbols = "!@#$%";

  const result = [];

  result.push(getRandomChar(numbers));
  result.push(getRandomChar(numbers));
  result.push(getRandomChar(upperChars));
  result.push(getRandomChar(upperChars));
  result.push(getRandomChar(lowerChars));
  result.push(getRandomChar(lowerChars));
  result.push(getRandomChar(symbols));
  result.push(getRandomChar(symbols));

  return shuffleArray(result).join("");
}

function shuffleArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }

  return array;
}

function getRandomChar(str) {
  return str[Math.floor(Math.random() * str.length)];
}

Объяснение:

Для начала напишем две вспомогательные функции getRandomChar которая с помощью Math.random возвращает случайный символ из переданной строки и функцию shuffleArray которая использует Тасование Фишера — Йетса для случайного перемешивания массива. Теперь в основной функции зададим четыре константы numbers, upperChars, lowerChars и symbols они нужны нам для соблюдения условия. Далее создадим массив result и запушим в него по два случайных символа из наших констант, затем перемешаем наш массив, соединим его в строку и вернём.

Код для проверки:

function generatePassword() {
  const numbers = "0123456789",
    upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
    lowerChars = "abcdefghijklmnopqrstuvwxyz",
    symbols = "!@#$%";

  const result = [];

  result.push(getRandomChar(numbers));
  result.push(getRandomChar(numbers));
  result.push(getRandomChar(upperChars));
  result.push(getRandomChar(upperChars));
  result.push(getRandomChar(lowerChars));
  result.push(getRandomChar(lowerChars));
  result.push(getRandomChar(symbols));
  result.push(getRandomChar(symbols));

  return shuffleArray(result).join("");
}

function shuffleArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }

  return array;
}

function getRandomChar(str) {
  return str[Math.floor(Math.random() * str.length)];
}

console.log(generatePassword()); // Например 4i%X5uY@
console.log(generatePassword()); // Например %m44ELp%
console.log(generatePassword()); // Например Zfj@O82@

Report Page