package question import ( "math/rand" "github.com/hhhapz/codequest/models" ) var bank Bank // Bank is a map of different questions registered. // The key of the map is the ID of the question. // // A custom type was created for convenience for picking random questions based // on difficulties, and for registration. type Bank [][]*Question func Register(q *Question) { bank[q.Level] = append(bank[q.Level], q) } func Questions(user *models.User, level Level) []*Question { qs := make([]*Question, len(bank)) r := rand.New(rand.NewSource(user.CreatedAt.Time().Unix())) for level := range bank { idx := r.Intn(len(bank[level])) qs[level] = bank[level][idx] } return qs } type Question struct { ID string Text string Level Level Generate func(user *models.User) string Validate func(user *models.User, solution string) bool } // Level represents the difficulty of each question. // As the level gets higher, the difficulty also gets higher. type Level int // Allowed difficulty levels. const ( Level1 Level = iota Level2 Level3 )