News for hackers. Stuff that matters.
Re:Data munging in Perl 6 vs. Perl 5 by codygman on Wednesday December 10, 2014 @11:29PM (#8733202)
A Haskell solution, though I'm sure someone can do better ;)

Perhaps I'll clean it up using printf/format[0] later.

    {-# LANGUAGE OverloadedStrings #-}
    import           Control.Monad     (liftM)
    import qualified Data.HashMap.Lazy as H
    import           Data.List         (sort)
    import           Data.Maybe        (fromMaybe)
    import           Data.Monoid       ((<>))
    import qualified Data.Text         as T
    import qualified Data.Text.IO      as TIO
    import           Prelude
    
    main :: IO ()
    main = do
      gradesMap <- liftM
                   (H.fromList . map ((\(x:y:_) -> (x,y)) . T.splitOn "\t") . T.lines)
                   (TIO.readFile "example.txt")
      let failingNames = H.keys $ H.filter ((== F) . T.take 1) gradesMap
          gradeTotals = foldl
                        (\m k -> H.insertWith (+) (T.take 1 k) 1 m)
                        H.empty
                        (H.elems gradesMap)
      TIO.putStrLn $ "Zsófia's grades: " <>
        fromMaybe "N/A" (H.lookup "Zsófia" gradesMap)
      TIO.putStrLn "List of students with a failing grade:"
      TIO.putStrLn $ "  " <> T.intercalate ", " failingNames
      TIO.putStrLn "Distribution of grades by letter:"
      mapM_ (\(k,v) -> TIO.putStrLn $ "  " <> k <> ": " <> (T.pack . show $ v) <> " students")
        (sort . H.toList $ gradeTotals)

0: http://hackage.haskell.org/package/formatting

There are no comments on this comment yet.