Allergies

Allergies

Moyen

Instructions

Étant donné le score d'allergie d'une personne, détermine si elle est allergique ou non à un élément donné, ainsi que la liste complète de ses allergies.

Un test d'allergie produit un score numérique unique qui contient les informations sur toutes les allergies de la personne (celles pour lesquelles elle a été testée).

La liste des éléments testés (et leur valeur) est la suivante :

  • eggs (1)
  • peanuts (2)
  • shellfish (4)
  • strawberries (8)
  • tomatoes (16)
  • chocolate (32)
  • pollen (64)
  • cats (128)

Ainsi, si Tom est allergique aux peanuts et au chocolate, il obtient un score de 34.

Maintenant, avec seulement ce score de 34, ton programme doit pouvoir dire :

  • Si Tom est allergique à l'un des allergènes listés ci-dessus.
  • Tous les allergènes auxquels Tom est allergique.

Remarque : un score donné peut inclure des allergènes non listés ci-dessus (c'est-à-dire des allergènes dont le score est 256, 512, 1024, etc.). Ton programme doit ignorer ces composantes du score. Par exemple, si le score d'allergie est 257, ton programme ne doit rapporter que l'allergie eggs (1).

Indices

Pour venir à bout de cet exercice, tu dois créer le type de données Allergen, avec les instances Eq et Show, et implémenter les fonctions suivantes :

  • allergies
  • isAllergicTo

Tu trouveras une déclaration de données factice et des signatures de type déjà en place, mais c'est à toi de définir les fonctions et de créer un type de données, un newtype ou un synonyme de type qui a du sens.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Haskell Exercism

Prêt à commencer Allergies ?

Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.

Analyse approfondie de Allergies !

On explore le décalage de bits, la comparaison bit à bit et d'autres concepts sur les nombres binaires ! On jette aussi un œil à une solution qui utilise le filtrage par motif, ainsi qu'à une approche intéressante en Erlang reposant sur la récursivité.