1votos

Localización de valores en un plano R^2 en Haskell

por josejuan hace 4 años

.

Dados N puntos decir que porcentaje de ellos esta en los 4 cuadrantes de un plano cartesiano.

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
pct :: (Num a, Ord a, Fractional b) => [(a, a)] -> [((a, a), b)] 
pct xs = map (second(/fromIntegral n)) $ assocs $ fromListWith (+) $ map ((,1).(s *** s)) xs 
         where n = length xs 
               s x | x < 0     = -1 
                   | otherwise =  1 
 
 
 
 
-- Por ejemplo: 
main = do 
 
    -- Una forma de imprimir 
    let ppct :: (Num a, Ord a, Show a) => [((a, a), Double)] -> IO () 
        ppct = mapM_ (\((x, y), p) -> printf "(%4s, %4s): %0.3f%%\n" (show x) (show y) (100 * p)) 
 
    -- Por ejemplo para coordenadas con componentes enteras: 
    ppct $ pct [(1,1),(-2,2),(3,-5),(-2 :: Int,-3 :: Int)] 
    {- 
        (-1, -1): 25.000% 
        (-1,  1): 25.000% 
        ( 1, -1): 25.000% 
        ( 1,  1): 25.000% 
    -} 
     
    -- Por ejemplo para coordenadas con componentes decimales: 
    xs <- mapM (\_ -> do x <- randomRIO (-1.0, 1.0 :: Double) 
                         y <- randomRIO (-1.0, 1.0 :: Double) 
                         return (x, y)) [1..1e5] 
    ppct $ pct xs 
    {- 
        (-1.0, -1.0): 25.065% 
        (-1.0,  1.0): 25.048% 
        ( 1.0, -1.0): 25.134% 
        ( 1.0,  1.0): 24.753% 
    -} 
3 comentarios
0votos

Escrito por KYKEX hace 4 años

muy buena amigo, mira haskell es complicado de aprender?
0votos

Escrito por josejuan hace 4 años

Gracias :)
Sí, Haskell habitualmente es considerado un lenguaje difícil de aprender. No obstante, unas nociones básicas no son difíciles de aprender y pueden hacer que "cojas el gusanillo" :)
0votos

Escrito por KYKEX hace 3 años

Ahora que lo veo siempre se puede mejorar, porque debería decir también cuantos puntos están en el origen y cuantos en los ejes X ó Y para que fuera mas didáctico el asunto.

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.