[Решение] 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