"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) 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 := rngSource{}
generator.Seed(time.Now().Unix()) generator.Seed(time.Now().Unix())
rand.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{} rndTable := [100000]uint64{}
maxRandoms := maxPts * 10 maxRandoms := maxPts * 10
if rngType == FastRng {
for i := 0; i < maxRandoms; i++ { for i := 0; i < maxRandoms; i++ {
rndTable[i] = 1 + generator.Uint64()%mp rndTable[i] = 1 + generator.Uint64()%mp
} }
} else {
for i := 0; i < maxRandoms; i++ {
rndTable[i] = 1 + uint64(rand.Int63n(int64(mp)))
}
}
nextRandom := 0 nextRandom := 0
getNextRandom := func() uint64 { getNextRandom := func() uint64 {
if rngType == AlwaysNewRng {
return 1 + uint64(rand.Int63n(int64(mp)))
}
res := rndTable[nextRandom] res := rndTable[nextRandom]
nextRandom++ nextRandom++
if nextRandom >= maxRandoms { if nextRandom >= maxRandoms {
@@ -296,7 +313,7 @@ func new21GameExperimental(n int, k int, maxPts int) float64 {
return float64(nOrLessCount) / float64(kOrMoreCount) return float64(nOrLessCount) / float64(kOrMoreCount)
} }
stabilityThreshold := 100 stabilityThreshold := 1000
precision := 0.00001 precision := 0.00001
stability := 0 stability := 0
@@ -317,5 +334,5 @@ func new21GameExperimental(n int, k int, maxPts int) float64 {
} }
func New21Game(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)
} }