"837. New 21 Game" medium, experiments with random numbers generation

This commit is contained in:
2022-06-23 21:08:43 +03:00
parent abcc78ac0f
commit ad8f04f025

View File

@@ -246,7 +246,15 @@ func (rng *rngSource) Uint64() uint64 {
return uint64(x)
}
func new21GameExperimental(n int, k int, maxPts int) float64 {
type RngType int
const (
StandardRng RngType = iota
FastRng
AlwaysNewRng
)
func new21GameExperimental(n int, k int, maxPts int, rngType RngType) float64 {
generator := rngSource{}
generator.Seed(time.Now().Unix())
rand.Seed(time.Now().Unix())
@@ -255,12 +263,21 @@ func new21GameExperimental(n int, k int, maxPts int) float64 {
rndTable := [100000]uint64{}
maxRandoms := maxPts * 10
if rngType == FastRng {
for i := 0; i < maxRandoms; i++ {
rndTable[i] = 1 + generator.Uint64()%mp
}
} else {
for i := 0; i < maxRandoms; i++ {
rndTable[i] = 1 + uint64(rand.Int63n(int64(mp)))
}
}
nextRandom := 0
getNextRandom := func() uint64 {
if rngType == AlwaysNewRng {
return 1 + uint64(rand.Int63n(int64(mp)))
}
res := rndTable[nextRandom]
nextRandom++
if nextRandom >= maxRandoms {
@@ -296,7 +313,7 @@ func new21GameExperimental(n int, k int, maxPts int) float64 {
return float64(nOrLessCount) / float64(kOrMoreCount)
}
stabilityThreshold := 100
stabilityThreshold := 1000
precision := 0.00001
stability := 0
@@ -317,5 +334,5 @@ func new21GameExperimental(n int, k int, maxPts int) float64 {
}
func New21Game(n int, k int, maxPts int) float64 {
return new21GameExperimental(n, k, maxPts)
return new21GameExperimental(n, k, maxPts, FastRng)
}