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 }