Skip to content

Commit

Permalink
feat: Gerenation of a given amount of quizzes
Browse files Browse the repository at this point in the history
  • Loading branch information
cheatsnake committed Sep 11, 2022
1 parent 1b4a5c0 commit 4f4296a
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 15 deletions.
20 changes: 13 additions & 7 deletions pkg/countries/constants.go
Original file line number Diff line number Diff line change
@@ -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"
)
33 changes: 25 additions & 8 deletions pkg/countries/core.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"errors"
"io/ioutil"
"log"
"math"
"path/filepath"
)

Expand All @@ -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
}
46 changes: 46 additions & 0 deletions pkg/countries/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

0 comments on commit 4f4296a

Please sign in to comment.