AtCoder Beginner Contest 001

Submission #297339

Source codeソースコード

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


type HHMM = Int
type Minute = Int
type Count = Int


type MinuteCountMap = M.IntMap Count
type Period = (Minute, Minute)


readPeriod :: String -> Period
readPeriod s = ((toMinute . read . take 4) s, (toMinute . read . drop 5) s)


showPeriod :: Period -> String
showPeriod (st, en) = printf "%04d-%04d" (toHHMM st) (toHHMM en)


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)


main :: IO ()
main = do
    num <- getNumber
    ps <- getPeriods num
    let ps' = merge $ roundPeriod <$> ps
    mapM_ putStrLn (Prelude.map showPeriod ps')


getNumber :: IO Int
getNumber = read <$> getLine


getPeriods :: Int -> IO [Period]
getPeriods num = do
    replicateM num (readPeriod <$> getLine)


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


merge :: [Period] -> [Period]
merge ps = ps'
  where
    cm = foldl' addPeriodToCountMap M.empty ps
    (ps', _, _) = M.foldrWithKey' cumsum ([], 0, 0) cm


addPeriodToCountMap :: MinuteCountMap -> Period -> MinuteCountMap
addPeriodToCountMap m (st, en) = addToCountMap en (-1) (addToCountMap st 1 m)


addToCountMap :: Minute -> Count -> MinuteCountMap -> MinuteCountMap
addToCountMap mi c m = case M.lookup mi m of
    Nothing -> M.insert mi c m
    Just c' -> let c'' = c + c' in
                    case c'' of
                        0 -> M.delete mi m
                        _ -> M.insert mi c'' m


cumsum :: Minute -> Count -> ([Period], Count, Minute) -> ([Period], Count, Minute)
cumsum mi c (ps, ac, en) = case ac' of
    0 -> ((mi, en) : ps, 0, 0)
    _ -> case en of
            0 -> (ps, ac', mi)
            _ -> (ps, ac', en)
  where
    ac' = ac + c

Submission

Task問題 D - 感雨時刻の整理
User nameユーザ名 ふじやん
Created time投稿日時
Language言語 Haskell (GHC 7.4.1)
Status状態 AC
Score得点 100
Source lengthソースコード長 2019 Byte
File nameファイル名
Exec time実行時間 568 ms
Memory usageメモリ使用量 23456 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 28 ms 1440 KB
00_sample_02.txt AC 26 ms 1340 KB
00_sample_03.txt AC 26 ms 1472 KB
cho_cho_chokudai.txt AC 517 ms 21788 KB
chokudai_ga_cho.txt AC 538 ms 22172 KB
test_01.txt AC 32 ms 2032 KB
test_02.txt AC 30 ms 1984 KB
test_03.txt AC 31 ms 1948 KB
test_04.txt AC 30 ms 1948 KB
test_05.txt AC 31 ms 1968 KB
test_06.txt AC 32 ms 1948 KB
test_07.txt AC 31 ms 1948 KB
test_08.txt AC 30 ms 1864 KB
test_09.txt AC 38 ms 2268 KB
test_10.txt AC 38 ms 2332 KB
test_11.txt AC 36 ms 2200 KB
test_12.txt AC 36 ms 2076 KB
test_13.txt AC 32 ms 1948 KB
test_14.txt AC 37 ms 2204 KB
test_15.txt AC 38 ms 2336 KB
test_16.txt AC 30 ms 1948 KB
test_17.txt AC 37 ms 2208 KB
test_18.txt AC 31 ms 1944 KB
test_19.txt AC 34 ms 2076 KB
test_20.txt AC 36 ms 2208 KB
test_21.txt AC 557 ms 22876 KB
test_22.txt AC 546 ms 22684 KB
test_23.txt AC 565 ms 22836 KB
test_24.txt AC 552 ms 22676 KB
test_25.txt AC 552 ms 22816 KB
test_26.txt AC 559 ms 23336 KB
test_27.txt AC 517 ms 21664 KB
test_28.txt AC 548 ms 22236 KB
test_29.txt AC 29 ms 1372 KB
test_30.txt AC 29 ms 1884 KB
test_31.txt AC 104 ms 5336 KB
test_32.txt AC 29 ms 1816 KB
test_33.txt AC 374 ms 16552 KB
test_34.txt AC 28 ms 1432 KB
test_35.txt AC 33 ms 2068 KB
test_36.txt AC 559 ms 22684 KB
test_37.txt AC 560 ms 23068 KB
test_38.txt AC 560 ms 23196 KB
test_39.txt AC 537 ms 21660 KB
test_40.txt AC 540 ms 21704 KB
test_41.txt AC 524 ms 21788 KB
test_42.txt AC 568 ms 23456 KB
test_43.txt AC 525 ms 21664 KB