Sparkline in unicode: Difference between revisions
→{{header|Haskell}}: Tidied, obtained max and min values in one pass rather than two
(Add SenseTalk implementation) |
(→{{header|Haskell}}: Tidied, obtained max and min values in one pass rather than two) |
||
Line 1,073:
Or, stripping back a little:
{{Trans|Python}}
<lang haskell>import Data.
import Data.List (findIndex)
import Data.List.Split (splitOneOf)
import Data.Maybe (maybe)
------------------------ SPARK LINE ----------------------
sparkLine :: [Float] -> String
sparkLine
sparkLine xxs@(x : xs) =
maybe '█' ("▁▂▃▄▅▆▇" !!) . flip findIndex lbounds . flip (>) <$> xs▼
fmap
. flip findIndex lbounds
. (<)
)
xxs
where
(mn, mx) = foldr (
w = (mx - mn) / 8
lbounds = (mn +) . (w *) <$> [1 .. 7]
--------------------------- TEST -------------------------
parseFloats :: String -> [Float]▼
main :: IO ()
main =
mapM_ putStrLn $
sparkLine . parseFloats
<$> [ "0, 1, 19, 20",
]
▲parseFloats :: String -> [Float]
parseFloats =
fmap read
. filter (not . null)
. splitOneOf " ,"</lang>
{{Out}}
<pre>▁▁██
|