package allergies

// Allergies takes a score and returns all of the
// things that the score is allergic to.
func Allergies(score int) []string {
	var ret []string

	for _, v := range getAllAllergens() {
		if AllergicTo(score, v) {
			ret = append(ret, v)
		}
	}
	return ret
}

// AllergicTo takes a score and an allergen and returns if
// That score is allergic to that thing.
func AllergicTo(score int, tst string) bool {
	return score&getScoreForAllergen(tst) == getScoreForAllergen(tst)
}

func getAllAllergens() []string {
	return []string{
		"eggs",
		"peanuts",
		"shellfish",
		"strawberries",
		"tomatoes",
		"chocolate",
		"pollen",
		"cats",
	}
}

func getScoreForAllergen(tst string) int {
	ret := 1
	for _, v := range getAllAllergens() {
		if tst == v {
			return ret
		}
		ret *= 2
	}
	return -1
}
