"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)
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
for i := 0; i < maxRandoms; i++ {
|
||||
rndTable[i] = 1 + generator.Uint64()%mp
|
||||
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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user