Exercitium1-0.1.0.0: Problemas de Exercitium (Volumen 1)

CopyrightExercitium (03-06-14)
LicenseGPL-3
MaintainerJoseA.Alonso@gmail.com
Safe HaskellSafe
LanguageHaskell2010

Alergias

Description

Código de las alergias

Para la determinación de las alergia se utiliza los siguientes códigos para los alérgenos:

  Huevos ........   1
  Cacahuetes ....   2
  Mariscos ......   4
  Fresas ........   8
  Tomates .......  16
  Chocolate .....  32
  Polen .........  64
  Gatos ......... 128

Así, si Juan es alérgico a los cacahuetes y al chocolate, su puntuación es 34 (es decir, 2+32).

Los alérgenos se representan mediante el siguiente tipo de dato

 data Alergeno = Huevos
               | Cacahuetes
               | Mariscos
               | Fresas
               | Tomates
               | Chocolate
               | Polen
               | Gatos
               deriving (Enum, Eq, Show, Bounded)

Definir la función

alergias :: Int -> [Alergeno]

tal que (alergias n) es la lista de alergias correspondiente a una puntuación n. Por ejemplo,

>>> alergias 0
[]
>>> alergias 1
[Huevos]
>>> alergias 2
[Cacahuetes]
>>> alergias 8
[Fresas]
>>> alergias 3
[Huevos,Cacahuetes]
>>> alergias 5
[Huevos,Mariscos]
>>> alergias 248
[Fresas,Tomates,Chocolate,Polen,Gatos]
>>> alergias 255
[Huevos,Cacahuetes,Mariscos,Fresas,Tomates,Chocolate,Polen,Gatos]
>>> alergias 509
[Huevos,Mariscos,Fresas,Tomates,Chocolate,Polen,Gatos]

Synopsis

Documentation

alergias :: Int -> [Alergeno] Source #

1ª definición (usando números binarios).

int2bin :: Int -> [Int] Source #

(int2bin n) es la representación binaria del número n. Por ejemplo,

>>> int2bin 10
[0,1,0,1]

ya que 10 = 0*1 + 1*2 + 0*4 + 1*8

alergias2 :: Int -> [Alergeno] Source #

2ª definición (sin usar números binarios).

alergias3 :: Int -> [Alergeno] Source #

3ª definición (con combinaciones).

alergenos :: [Alergeno] Source #

alergenos es la lista de los alergenos

codigos :: [Int] Source #

codigos es la lista de los códigos de los alergenos.

descomposicion :: Int -> [Int] Source #

(descomposicion n) es la descomposición de n (módulo 256) como sumas de potencias de 2. Por ejemplo,

>>> descomposicion 3
[1,2]
>>> descomposicion 5
[1,4]
>>> descomposicion 248
[8,16,32,64,128]
>>> descomposicion 255
[1,2,4,8,16,32,64,128]
>>> descomposicion 509
[1,4,8,16,32,64,128]

prop_equiv_alergias :: NonNegative Int -> Bool Source #

Comprobación de la equivalencia de las definiciones de alergia.

>>> quickCheck prop_equiv_alergias
+++ OK, passed 100 tests.