39 lines
754 B
Go
39 lines
754 B
Go
package flags
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/binary"
|
|
"math/rand"
|
|
)
|
|
|
|
func shuffleSliceRandom(slice []string) []string {
|
|
shuffled := make([]string, len(slice))
|
|
copy(shuffled, slice)
|
|
|
|
for i := len(shuffled) - 1; i > 0; i-- {
|
|
j := rand.Intn(i + 1)
|
|
shuffled[i], shuffled[j] = shuffled[j], shuffled[i]
|
|
}
|
|
|
|
return shuffled
|
|
}
|
|
|
|
func shuffleSlice(slice []string, seed string) []string {
|
|
hasher := sha256.New()
|
|
hasher.Write([]byte(seed))
|
|
hash := hasher.Sum(nil)
|
|
|
|
seedInt := int64(binary.LittleEndian.Uint64(hash[:8]))
|
|
|
|
r := rand.New(rand.NewSource(seedInt))
|
|
|
|
shuffled := make([]string, len(slice))
|
|
copy(shuffled, slice)
|
|
|
|
r.Shuffle(len(shuffled), func(i, j int) {
|
|
shuffled[i], shuffled[j] = shuffled[j], shuffled[i]
|
|
})
|
|
|
|
return shuffled
|
|
}
|