"837. New 21 Game" medium, experiments with random numbers generation
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user