どどっとHaskell

ひさしぶりにHaskellでプログラムを書いた。やっぱり楽しい。ネタはこれ。
http://www.ioi-jp.org/joi/index.html
1問目はアニマックスでガンダム観ながら書いたからか、ダラダラしてる。ブライト(の声の人)死んじゃったんだよなぁ。ご冥福をお祈り致します。

--2006年本選1問目より
module Main (main) where

import System
import Data.List (partition, intersperse, sortBy)

data Student = Student Int [Int] deriving (Show)

main = do
    (inputFile:_) <- getArgs
    result <- readFile inputFile >>= return . sortResult . result . parse . lines
    writeFile "output.txt" result

sortResult :: [(Int,Int)] -> String
sortResult x = intersperse ' ' $ concatMap show $ map (fst) $ sortBy (sortResult') x
    where
        sortResult' (i,j) (k,l) = if (j >= l) then LT else GT

result :: [Student] -> [(Int,Int)]
result students = zip [1..] $ foldr1 (zipWith (+)) $ map parse' students
    where
        parse' (Student s t) = t

parse :: [String] -> [Student]
parse [] = []
parse (x:xs) = let (studentNumber,placeNumber) = parseNumber x
                 in parseExpect studentNumber placeNumber xs

parseNumber :: String -> (Int, Int)
parseNumber line = let (x,y) = break ((==) ' ') line
                     in (read x, read y)

parseExpect :: Int -> Int -> [String] -> [Student]
parseExpect n m lines = map (student . parseLine m) lines
    where
        parseLine :: Int -> String -> (Int,[Int])
        parseLine num l = (num, map (\x -> read [x]) $ filter ((/=) ' ') l)

        student :: (Int,[Int]) -> Student
        student (x,xs) = Student x xs

それにしてもDVDボックス欲しいなぁ。誰か買ってくれないかなぁ。