AtCoder Beginner Contest 001

Submission #288911

Source codeソースコード

import Control.Applicative
import Control.Monad
import Data.List
import qualified Data.Map as M
import Text.Printf

type HHMM = Int
type Minute = Int
type Count = Int
data Period = Period Minute Minute

instance Read Period where
    readsPrec _ s = [(Period ((toMinute . read . take 4) s) ((toMinute . read . drop 5) s), [])]

instance Show Period where
    show (Period st en) = printf "%04d-%04d" (toHHMM st) (toHHMM en)


main :: IO ()
main = do
    num <- read <$> getLine
    (ps, _, _) <- (M.foldrWithKey merge ([], 0, 0)) <$> (foldl' addPeriodToCountMap M.empty) <$> ((replicateM num) $ (roundPeriod . read) <$> getLine)
    mapM_ putStrLn (Prelude.map show ps)
--    pm <- (foldl' addPeriodToCountMap M.empty) <$> ((replicateM num) $ (roundPeriod . read) <$> getLine)
--    mapM_ putStrLn (map (show . (\(k, v) -> (toHHMM k, v))) (M.toList pm))


toMinute :: HHMM -> Minute
toMinute x = (h * 60) + m
  where
    h = x `div` 100
    m = x - (h * 100)


toHHMM :: Minute -> HHMM
toHHMM x = (h * 100) + m
  where
    h = x `div` 60
    m = x - (h * 60)


roundPeriod :: Period -> Period
roundPeriod (Period st en) = Period ((st `div` 5) * 5) (((en + 4) `div` 5) * 5)


addToCountMap :: Minute -> Count -> M.Map Minute Count -> M.Map Minute Count
addToCountMap mi c m = case M.lookup mi m of
    Nothing -> M.insert mi c m
    Just c' -> M.insert mi (c' + c) m


addPeriodToCountMap :: M.Map Minute Count -> Period -> M.Map Minute Count
addPeriodToCountMap m (Period st en) = addToCountMap en (-1) (addToCountMap st 1 m)


merge :: Minute -> Count -> ([Period], Count, Minute) -> ([Period], Count, Minute)
merge mi c (ps, ac, en) = case ac + c of
    0         -> ((Period mi en) : ps, 0, 0)
    otherwise -> case en of
        0         -> (ps, ac + c, mi)
        otherwise -> (ps, ac + c, en)

Submission

Task問題 D - 感雨時刻の整理
User nameユーザ名 ふじやん
Created time投稿日時
Language言語 Haskell (GHC 7.4.1)
Status状態 AC
Score得点 100
Source lengthソースコード長 1862 Byte
File nameファイル名
Exec time実行時間 586 ms
Memory usageメモリ使用量 23328 KB

Test case

Set

Set name Score得点 / Max score Cases
all 100 / 100 00_sample_01.txt,00_sample_02.txt,00_sample_03.txt,cho_cho_chokudai.txt,chokudai_ga_cho.txt,test_01.txt,test_02.txt,test_03.txt,test_04.txt,test_05.txt,test_06.txt,test_07.txt,test_08.txt,test_09.txt,test_10.txt,test_11.txt,test_12.txt,test_13.txt,test_14.txt,test_15.txt,test_16.txt,test_17.txt,test_18.txt,test_19.txt,test_20.txt,test_21.txt,test_22.txt,test_23.txt,test_24.txt,test_25.txt,test_26.txt,test_27.txt,test_28.txt,test_29.txt,test_30.txt,test_31.txt,test_32.txt,test_33.txt,test_34.txt,test_35.txt,test_36.txt,test_37.txt,test_38.txt,test_39.txt,test_40.txt,test_41.txt,test_42.txt,test_43.txt

Test case

Case name Status状態 Exec time実行時間 Memory usageメモリ使用量
00_sample_01.txt AC 27 ms 1368 KB
00_sample_02.txt AC 25 ms 1312 KB
00_sample_03.txt AC 25 ms 1308 KB
cho_cho_chokudai.txt AC 537 ms 22304 KB
chokudai_ga_cho.txt AC 576 ms 22944 KB
test_01.txt AC 30 ms 1824 KB
test_02.txt AC 30 ms 1936 KB
test_03.txt AC 30 ms 1820 KB
test_04.txt AC 28 ms 1824 KB
test_05.txt AC 30 ms 1888 KB
test_06.txt AC 29 ms 1908 KB
test_07.txt AC 29 ms 1824 KB
test_08.txt AC 28 ms 1904 KB
test_09.txt AC 35 ms 2212 KB
test_10.txt AC 39 ms 2212 KB
test_11.txt AC 34 ms 2076 KB
test_12.txt AC 33 ms 2036 KB
test_13.txt AC 31 ms 1908 KB
test_14.txt AC 36 ms 2204 KB
test_15.txt AC 37 ms 2292 KB
test_16.txt AC 29 ms 1820 KB
test_17.txt AC 35 ms 2208 KB
test_18.txt AC 29 ms 1952 KB
test_19.txt AC 33 ms 2052 KB
test_20.txt AC 35 ms 2080 KB
test_21.txt AC 581 ms 23328 KB
test_22.txt AC 581 ms 23192 KB
test_23.txt AC 583 ms 23328 KB
test_24.txt AC 573 ms 23200 KB
test_25.txt AC 581 ms 23200 KB
test_26.txt AC 586 ms 23324 KB
test_27.txt AC 540 ms 22624 KB
test_28.txt AC 569 ms 23140 KB
test_29.txt AC 25 ms 1312 KB
test_30.txt AC 27 ms 1756 KB
test_31.txt AC 105 ms 5280 KB
test_32.txt AC 27 ms 1824 KB
test_33.txt AC 385 ms 15520 KB
test_34.txt AC 28 ms 1428 KB
test_35.txt AC 31 ms 1952 KB
test_36.txt AC 580 ms 23196 KB
test_37.txt AC 574 ms 23328 KB
test_38.txt AC 576 ms 23324 KB
test_39.txt AC 564 ms 22944 KB
test_40.txt AC 571 ms 22940 KB
test_41.txt AC 553 ms 22048 KB
test_42.txt AC 580 ms 23328 KB
test_43.txt AC 553 ms 22176 KB