diff --git a/exercises/practice/allergies/.meta/src/example.clj b/exercises/practice/allergies/.meta/src/example.clj index cba06a787..03c7b82c6 100644 --- a/exercises/practice/allergies/.meta/src/example.clj +++ b/exercises/practice/allergies/.meta/src/example.clj @@ -3,22 +3,13 @@ (def ^:private allergens [:eggs :peanuts :shellfish :strawberries :tomatoes :chocolate :pollen :cats]) -(defn- flagged? - [flags index] - (-> (bit-shift-right flags index) - (bit-and 1) - (pos?))) - -(defn allergies - "Given an 8-bit bitmap of flags, return the list of matching allergens." - [flags] - (keep-indexed (fn [index allergen] - (when (flagged? flags index) - allergen)) - allergens)) +(def ^:private allergen->power + (zipmap allergens (range (count allergens)))) (defn allergic-to? - "Given an 8-bit bitmap of flags and an allergen, return a boolean - indicating whether or not the patient is allergic to the given allergen." - [flags allergen] - (some #{allergen} (allergies flags))) + [score allergen] + (bit-test score (allergen->power allergen))) + +(defn allergies + [score] + (keep-indexed #(if (bit-test score %1) %2) allergens))