Skip to content

Instantly share code, notes, and snippets.

@ocharles
Created November 15, 2011 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ocharles/1367709 to your computer and use it in GitHub Desktop.
Save ocharles/1367709 to your computer and use it in GitHub Desktop.
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