どどっと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ボックス欲しいなぁ。誰か買ってくれないかなぁ。