Sparkline in unicode: Difference between revisions
Content added Content deleted
(Add SenseTalk implementation) |
(→{{header|Haskell}}: Tidied, obtained max and min values in one pass rather than two) |
||
Line 1,073: | Line 1,073: | ||
Or, stripping back a little: |
Or, stripping back a little: |
||
{{Trans|Python}} |
{{Trans|Python}} |
||
<lang haskell>import Data. |
<lang haskell>import Data.Bifunctor (bimap) |
||
import Data.List (findIndex) |
import Data.List (findIndex) |
||
import Data.List.Split (splitOneOf) |
|||
import Data.Maybe (maybe) |
import Data.Maybe (maybe) |
||
------------------------ SPARK LINE ---------------------- |
|||
sparkLine :: [Float] -> String |
sparkLine :: [Float] -> String |
||
sparkLine |
sparkLine [] = "" |
||
sparkLine xxs@(x : xs) = |
|||
⚫ | |||
fmap |
|||
⚫ | |||
. flip findIndex lbounds |
|||
. (<) |
|||
) |
|||
xxs |
|||
where |
where |
||
(mn, mx) = ( |
(mn, mx) = foldr (bimap . min <*> max) (x, x) xs |
||
w = (mx - mn) / 8 |
w = (mx - mn) / 8 |
||
lbounds = (mn +) . (w *) <$> [1 .. 7] |
lbounds = (mn +) . (w *) <$> [1 .. 7] |
||
--------------------------- TEST ------------------------- |
|||
⚫ | |||
parseFloats = fmap read . filter (not . null) . splitOneOf " ," |
|||
main :: IO () |
main :: IO () |
||
main = |
main = |
||
mapM_ putStrLn $ |
mapM_ putStrLn $ |
||
sparkLine . parseFloats |
sparkLine . parseFloats |
||
[ "0, 1, 19, 20" |
<$> [ "0, 1, 19, 20", |
||
"0, 999, 4000, 4999, 7000, 7999", |
|||
"1 2 3 4 5 6 7 8 7 6 5 4 3 2 1", |
|||
"1.5, 0.5 3.5, 2.5 5.5, 4.5 7.5, 6.5" |
|||
] |
|||
]</lang> |
|||
⚫ | |||
parseFloats = |
|||
fmap read |
|||
. filter (not . null) |
|||
. splitOneOf " ,"</lang> |
|||
{{Out}} |
{{Out}} |
||
<pre>▁▁██ |
<pre>▁▁██ |