🗒 Задача¶
Создай программу, которая генерирует шестизначные пароли. Пусть пароль будет состоять из чередующихся цифр и строчных букв латинского алфавита (без специальных символов). Например, k5p6m2. Выведи сгенерированный пароль в консоль.
❌ Ошибки¶
- создают 6 диапазонов (а нужно ограничиться двумя и использовать цикл)
✏️ Комментарии¶
Рабочее решение, но все таки на выходе требуется именно строка, а не просто результат в консоли. Можешь сформировать конечный пароль в переменную?
В данном случае диапазоны с числом и символом инициализируются один раз при старте программы. Изменяемая переменная здесь не нужна
Технически в таком диапазоне вероятность появления единицы будет выше других чисел. Корректнее перечислять только однозначные числа
Нет необходимости приведения рандомного символа к строковому типу. Для формирования конечной строки предлагаю использовать интерполяцию
В своем решении ты создаешь диапазон при каждой итерации цикла. Давай зададим переменные с диапазоном чисел и диапазоном строк, а в цикле будем их использовать
PS: строго говоря, диапазон не создается, в Kotlin есть оптимизация, которая под капотом просто делает `Random().nextInt(...)`, но все же
Такая реализация требует множественного ручного дублирования кода и увеличивает риск ошибок. Представь гипотетически, что потребуется генерация длинного пароля, например, из 21 символа)
Попробуй автоматизировать процесс с помощью цикла, это сделает код более читаемым, удобным для внесения изменений и масштабируемым.
Кроме того, на будущее, когда получается слишком длинная строка (более 120 символов) есть системы в крупных и средних проектах для автоматизированной проверки кода, например: [Detekt](https://detekt.dev/docs/rules/formatting/#maximumlinelength), который не пропустит такой код.
🧾 Решение¶
const val PASSWORD_SIZE = 6
fun main() {
val charRangeForPassword: CharRange = 'a'..'z'
val intRangeForPassword: IntRange = 0..9
var password = ""
for (i in PASSWORD_SIZE downTo 1) {
if (i % 2 == 0) password += charRangeForPassword.random()
else password += intRangeForPassword.random().toString()
}
println("Generated password: $password")