[Решение] JavaScript задача #5

[Решение] JavaScript задача #5


Условие здесь.

Код

const { randomFillSync } = require('crypto')

const generate = x => {
  let string = ''
  while (string.length < x) {
    string += (randomFillSync(Buffer.alloc(1)).asciiSlice()).trim().replace(/[^\x30-\x7A]+/g, '')
  }
  return string
}

Пояснение

Мы используем встроенный crypto модуль, как и было разрешено в условии. Далее мы циклом заполняем строку так, чтобы её длина равнялась x.

Теперь разберём что добавляем в строку.

Сначала мы выделяем часть памяти для буфера, затем мы заполняем его случайными байтами, далее превращаем в ASCII строку с помощью функции asciiSlice. Затем мы убираем табуляцию / пробелы с помощью trim. И в конце мы заменяем все уродливые ASCII символы, по типу {\` на пустое пространство. Очевидно после такого форматирования останется много незаполненных ячеек. Следовательно мы превращаем такой процесс в цикл.

Ну и в конце, когда длина строки равна числу x, мы возвращаем наш сгенерированный пароль.

Решение доступно на Repl.it.

Тест

console.log(generate(17))
console.log(generate(32).length === 32)
// 8KA`^pPN]GMBMD6p_
// true

Report Page