func randomTransition(ch *markovchain.Chain, state markovchain.State) markovchain.State { entry := ch.Lookup(state) if entry == nil || len(entry.Targets) == 0 { return nil } prob := rand.Float64() var curProb float64 for i, x := range entry.Probabilities { curProb += x if curProb > prob { return entry.Targets[i] } } return entry.Targets[len(entry.Targets)-1] }