0votos

fiesta baile de gala en Haskell

por josejuan hace 3 años

Se da la solución para cualquier tipo de criatura y criterio de selección de los salones. Se dice que los Ángeles y Demonios fueron creados hace unos 6.000 años y que montaron su propio salón Celestial...

realizar en lenguaje C++ con ciclo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import Control.Monad 
import Data.Function 
import Data.List 
 
data Sexo = Hombres | Mujeres | Ángeles | Demonios deriving (Eq, Show, Enum, Bounded) 
  
data Criatura = Criatura { sexo :: Sexo, edad :: Int } deriving (Eq, Show) 
 
-- Puede leer cualquier número de criaturas: 
leeCriaturas :: IO [Criatura] 
leeCriaturas = concat ↥ ↱(λp → putStrLn (show p ⧺ " edades:") » map (Criatura p ∘ read) ∘ words ↥ getLine) [minBound…] 
 
-- Puede aplicar un reparto de salón bajo cualquier criterio de reparto (ej. Demonios con Mujeres ...) 
salónReparto :: [Criatura] → (Criatura → 𝔹) → (Criatura → 𝔹) → (Sexo, Int, Int) 
salónReparto cs a b = (sexo c, v - u, u) where [(_,u),((c:_),v)] = sortBy (compare `on` snd) $ map (ap (,) length ∘ (`filter` cs)) [a,b] 
 
-- Muestra la información que se requiera de un reparto cualquiera: 
reportSalónReparto :: 𝐒 → (Sexo, Int, Int) → IO () 
reportSalónReparto salón (s, f, p) = putStrLn $ "En el salón " ⧺ salón ⧺ " entran " ⧺ show p ⧺ " parejas y " ++ 
                                        if f ≡ 0 then "nadie se quedó fuera" else show f ⧺ " " ⧺ show s ⧺ " se quedaron fuera" 
                                         
-- Por ejemplo                           
main = do 
    cs ← leeCriaturas 
    ↱_(λ(s,a,b) → reportSalónReparto s $ salónReparto cs a b) 
      [("Adultos", λc → sexo c ≡ Hombres ∧ edad c ≥ 18, λc → sexo c ≡ Mujeres ∧ edad c ≥ 18) 
      ,("Jóvenes", λc → sexo c ≡ Hombres ∧ edad c < 18, λc → sexo c ≡ Mujeres ∧ edad c < 18) 
      ,("Celestial", (Ángeles ≡) ∘ sexo, (Demonios ≡) ∘ sexo)] 
 
{- 
 
    > main 
    Hombres edades: 
    10 31 16 39 17 13 41 52 46 
    Mujeres edades: 
    12 15 17 17 13 9 44 50 37 
    Ángeles edades: 
    6000 6000 6000 6000 6000 6000 6000 
    Demonios edades: 
    6000 6000 6000 
    En el salón Adultos entran 3 parejas y 2 Hombres se quedaron fuera 
    En el salón Jóvenes entran 4 parejas y 2 Mujeres se quedaron fuera 
    En el salón Celestial entran 3 parejas y 4 Ángeles se quedaron fuera 
 
-} 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.