diff --git a/pkg/countries/constants.go b/pkg/countries/constants.go index abf9f45..b8f90f7 100644 --- a/pkg/countries/constants.go +++ b/pkg/countries/constants.go @@ -1,12 +1,18 @@ package countries -const flagImageUrl string = "https://flagcdn.com/w320/" -const flagImageFormat string = ".png" -const maxVariantsCount = 6 -const minVariantsCount = 2 +// app constant +const ( + flagImageUrl string = "https://flagcdn.com/w320/" + flagImageFormat string = ".png" + maxVariantsCount int = 6 + minVariantsCount int = 2 + maxQuizAmount int = 20 +) -// error constants +// error constant const ( - variantsCountToBig string = "the number of variants is too large" - variantsCountToLow string = "the number of variants is too small" + variantsCountToBig string = "the maximum number of variants should not exceed 6" + variantsCountToSmall string = "the number of variants should not be less than 2" + quizAmountToBig string = "the maximum value of amount should not exceed 20" + quizAmountToSmall string = "the value of amount should be positive" ) diff --git a/pkg/countries/core.go b/pkg/countries/core.go index e277a3a..aa6ca6c 100644 --- a/pkg/countries/core.go +++ b/pkg/countries/core.go @@ -5,6 +5,7 @@ import ( "errors" "io/ioutil" "log" + "math" "path/filepath" ) @@ -23,29 +24,45 @@ func init() { } // Get a quiz in which you have to guess the capital of the specified country -func GetCapitalQuiz(variants int) (CapitalQuiz, error) { +func GetCapitalQuiz(variants, amount int) ([]CapitalQuiz, error) { if variants > maxVariantsCount { - return CapitalQuiz{}, errors.New(variantsCountToBig) + return []CapitalQuiz{}, errors.New(variantsCountToBig) } if variants < minVariantsCount { - return CapitalQuiz{}, errors.New(variantsCountToLow) + return []CapitalQuiz{}, errors.New(variantsCountToSmall) } - result := generateCapitalQuiz(variants) + if amount > maxQuizAmount { + return []CapitalQuiz{}, errors.New(quizAmountToBig) + } + + if amount < 0 { + return []CapitalQuiz{}, errors.New(quizAmountToSmall) + } + + result := generateCapitalQuizzes(variants, int(math.Abs(float64(amount)))) return result, nil } // Get a quiz in which you have to guess the name of the country from the image of its flag -func GetCountryQuiz(variants int) (CountryQuiz, error) { +func GetCountryQuiz(variants, amount int) ([]CountryQuiz, error) { if variants > maxVariantsCount { - return CountryQuiz{}, errors.New(variantsCountToBig) + return []CountryQuiz{}, errors.New(variantsCountToBig) } if variants < minVariantsCount { - return CountryQuiz{}, errors.New(variantsCountToLow) + return []CountryQuiz{}, errors.New(variantsCountToSmall) + } + + if amount > maxQuizAmount { + return []CountryQuiz{}, errors.New(quizAmountToBig) + } + + if amount < 0 { + return []CountryQuiz{}, errors.New(quizAmountToSmall) } - result := generateCountryQuiz(variants) + result := generateCountryQuizzes(variants, int(math.Abs(float64(amount)))) return result, nil } diff --git a/pkg/countries/generator.go b/pkg/countries/generator.go index 00186d6..132e6fd 100644 --- a/pkg/countries/generator.go +++ b/pkg/countries/generator.go @@ -61,3 +61,49 @@ func generateCountryQuiz(variantsCount int) CountryQuiz { Variants: variants, Answer: randomCountry.Country} } + +func generateCapitalQuizzes(variants, amount int) []CapitalQuiz { + quizes := make([]CapitalQuiz, 0, amount) + + for i := 0; i < amount; i += 0 { + quiz := generateCapitalQuiz(variants) + isNew := true + + for _, q := range quizes { + if q.Answer == quiz.Answer { + isNew = false + break + } + } + + if isNew { + quizes = append(quizes, quiz) + i++ + } + } + + return quizes +} + +func generateCountryQuizzes(variants, amount int) []CountryQuiz { + quizzes := make([]CountryQuiz, 0, amount) + + for i := 0; i < amount; i += 0 { + quiz := generateCountryQuiz(variants) + isNew := true + + for _, q := range quizzes { + if q.Answer == quiz.Answer { + isNew = false + break + } + } + + if isNew { + quizzes = append(quizzes, quiz) + i++ + } + } + + return quizzes +}