0votos

¡Calculadora de Daño Pokémon! - 4geeks en Haskell

por josejuan hace 4 años

Una.

¡Es una batalla Pokémon! Tu tarea consiste en calcular el daño que un movimiento en particular haría.

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
import Data.Maybe 
import Control.Applicative 
 
 
data Poder = Fuego | Agua | Hierba | Eléctrico                    deriving (Eq, Show) 
 
data Ataque  a = Ataque  Poder a 
data Defensa a = Defensa Poder a 
 
 
dañoFactor    = 50 
eficaciaNula  = 0.5 
eficaciaMedia = 1 
eficaciaSuper = 2 
 
 
eficacia a b = if a == b then eficaciaNula else maybe undefinedRule id (e a b) 
   
  where e x y = maybe ((1/) <$> (r y x)) Just (r x y)           -- A -> B o bien B <- A 
   
        r Fuego     Hierba = Just eficaciaSuper 
        r Agua      Fuego  = Just eficaciaSuper 
        r Hierba    Agua   = Just eficaciaSuper 
        r Eléctrico Agua   = Just eficaciaSuper 
 
        r Eléctrico Fuego  = Just eficaciaMedia 
        r Eléctrico Hierba = Just eficaciaMedia 
 
        r _         _      = Nothing 
         
        undefinedRule = error $ "No se ha configurado la eficacia para un ataque de tipo `" ++ show a ++ " ataca a " ++ show b ++ "`" 
 
 
dañoAtaque (Ataque pa fa) (Defensa pd fd) = ceiling $ (dañoFactor * fa * eficacia pa pd) / fd 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.