Create a gist now

Instantly share code, notes, and snippets.

import Control.Arrow ((***))
import Control.Monad (join)
import Data.List (genericLength, mapAccumL)
import System (getArgs)
main = putStrLn . spark . map read =<< getArgs
spark = mapNormalize ((ticks!!) . round . (* (genericLength ticks - 1)))
ticks = " ▁▂▃▅▆▇"
mapNormalize :: (Ord a, Fractional a, Num a) => (a -> b) -> [a] -> [b]
mapNormalize f xs =
let ((min',max'), runNormalize) =
mapAccumL (\accumMinMax x ->
((min x *** max x) accumMinMax,
f $ (x - min')/(max' - min')))
(join (,) $ head xs) xs
in runNormalize
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment