/
utils.go
67 lines (54 loc) · 1.12 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package ergo
import (
"log"
"math/rand"
"time"
)
// Step defines a time step
type Step struct {
Time int `json:"stepIndex"`
Amount float32 `json:"cash"`
}
func (s *Step) increment() {
s.Time++
}
// Game a game object containing players
type Game struct {
Players []Player `json:"players"`
}
// Player a player in the game and its steps
type Player struct {
ID int `json:"id"`
Steps []Step `json:"steps"`
}
// Ensemble average of all players over time
type Ensemble struct {
Time []int `json:"stepIndex"`
Amount []float32 `json:"cash"`
}
// random number generator
var seed = rand.NewSource(time.Now().UnixNano())
var generator = rand.New(seed)
// coin flip
func flip() float32 {
prop := generator.Float32()
if prop > .5 {
return .6
}
return 1.5
}
// Roll run the game one step
func (g *Game) Roll(step int) {
if step == 0 {
log.Fatal("Must start at step 1")
}
for i := 0; i < len(g.Players); i++ {
g.Players[i].Steps[step].Amount = g.Players[i].Steps[step-1].Amount * flip()
}
}
// RollAll run all steps
func (g *Game) RollAll(steps int) {
for i := 1; i < steps; i++ {
g.Roll(i)
}
}