import IO import Monad dropComment :: String -> String dropComment ('#':s) = tail . dropWhile (/= '\n') $ s dropComment s = s readData :: String -> [(Int,Int)] readData s = case reads s of ((p,s'):_) -> case reads s' of ((t,s''):_) -> (p,t) : readData s'' _ -> [] _ -> [] speedups :: [(Int,Int)] -> [(Int,Float)] speedups ((p1,t1) : ps) = (p1,1) : [(p, fromIntegral t1 / fromIntegral t) | (p,t) <- ps] showSpeedup :: (Int,Float) -> String showSpeedup (p,s) = show p ++ " " ++ show (truncate s) ++ "." ++ show (truncate (s * 100) `mod` 100) ++ "\n" main = do s <- getContents putStr . concatMap showSpeedup . speedups . readData . dropComment $ s