|
|
@ -1,32 +1,21 @@
|
|
|
|
package algs4
|
|
|
|
package algs4
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
"crypto/rand"
|
|
|
|
|
|
|
|
"fmt"
|
|
|
|
"fmt"
|
|
|
|
"math/big"
|
|
|
|
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
const ROLL_SIDES = 6
|
|
|
|
const ROLL_SIDES = 6
|
|
|
|
|
|
|
|
|
|
|
|
func Rolls(nrolls int64) ([]*Counter, error) {
|
|
|
|
func Rolls(nrolls int64) ([]*Counter, error) {
|
|
|
|
var err error
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rolls := make([]*Counter, ROLL_SIDES+1)
|
|
|
|
rolls := make([]*Counter, ROLL_SIDES+1)
|
|
|
|
for i := 1; i <= ROLL_SIDES; i += 1 {
|
|
|
|
for i := 1; i <= ROLL_SIDES; i += 1 {
|
|
|
|
rolls[i] = NewCounter(fmt.Sprintf("%d's", i))
|
|
|
|
rolls[i] = NewCounter(fmt.Sprintf("%d's", i))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var result *big.Int
|
|
|
|
randMax := float64(ROLL_SIDES)
|
|
|
|
randMax := big.NewInt(ROLL_SIDES)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for t := int64(0); t < nrolls; t += 1 {
|
|
|
|
|
|
|
|
result, err = rand.Int(rand.Reader, randMax)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rolls[int(result.Int64())+1].Increment()
|
|
|
|
for t := int64(0); t < nrolls; t++ {
|
|
|
|
|
|
|
|
rolls[int(RandomUniform(float64(0.0), randMax))+1].Increment()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return rolls, nil
|
|
|
|
return rolls, nil
|
|
|
|