Пакет math/rand надає підтримку для генерування псевдовипадкових чисел.
Ось як згенерувати випадкове ціле число від 0 до 99:
n := rand.Intn(100) // n is a random int, 0 <= n < 100
Функція rand.Float64 повертає випадкове число з плаваючою комою від 0.0 до 1.0:
f := rand.Float64() // f is a random float64, 0.0 <= f < 1.0
Є також підтримка перемішування масиву (та інших структур даних):
x := []string{"a", "b", "c", "d", "e"}
// shuffling the slice put its elements into a random order
rand.Shuffle(len(x), func(i, j int) {
x[i], x[j] = x[j], x[i]
})
Послідовності чисел, які генерує пакет math/rand, не є справді випадковими.
Якщо задати конкретне «початкове значення» (англ. seed), результати будуть повністю передбачуваними.
У Go 1.20+ початкове значення обирається випадково автоматично, тож під час кожного запуску програми ми бачитимемо іншу послідовність випадкових чисел.
У попередніх версіях Go початкове значення типово дорівнювало 1.
Тому, щоб отримувати різні послідовності під час різних запусків програми, потрібно було вручну задати початкове значення для генератора випадкових чисел, наприклад, за поточним часом, перш ніж отримувати будь-які випадкові числа.
rand.Seed(time.Now().UnixNano())
Елейн працює над новою дитячою грою, у якій є тварини та чарівні палички. Настав час написати функції для кидання грального кубика, генерування випадкової енергії палички та перемішування зрізу.
Реалізуйте функцію RollADie.
Це буде традиційний двадцятигранний кубик із числами від 1 до 20.
d := RollADie() // d will be assigned a random int, 1 <= d <= 20
Реалізуйте функцію GenerateWandEnergy.
Енергія палички має бути випадковим числом з плаваючою комою, більшим або рівним 0.0 і меншим за 12.0.
f := GenerateWandEnergy() // f will be assigned a random float64, 0.0 <= f < 12.0
У грі є вісім різних тварин:
Напишіть функцію ShuffleAnimals, яка повертає зріз із цими вісьмома тваринами у випадковому порядку.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.