(하스켈) CONVERT 문제에서 발견한 채점 기준 의문...

  • csj6922
    csj6922

    어쩌면 사소한 부분일수도 있지만... 이 부분 때문에 몇시간을 날린게 슬퍼서 질문 하나 올리겠습니다.

    튜토리얼 문제중에 유독 이 문제만 계속 오답이 나와서 몇시간을 쩔쩔 맸습니다.
    그러다가 GG를 치고 다른 언어로 대충 푼 후에 정답자 분 코드를 긁어와서 차이를 좁혀가고 있었는데, 오답과 정답의 기준이 예상치 못한 부분이 나와서 멘붕이 왔습니다.

    코드가 길지도 않지만 귀찮으니까 포인트만 보여드리면


    main = do
        n <- readLn
        interact $ unlines . take n . map (\x -> show (fst x) ++ " " ++ (snd x)) . zip [1..] . map sol . lines
    

    main = interact $ unlines . map (\x -> show (fst x) ++ " " ++ (snd x)) . zip [1..] . map sol . tail . lines
    

    (이 문제에 한해서) 위의 코드는 정답이고 밑의 코드는 오답입니다.
    sol 부분은 둘이 똑같고 필요도 없는 것 같아서 뺐구요, 둘의 차이점은 주어진 테스트 케이스의 갯수까지만 입출력을 하는지 아니면 그냥 주는대로 계속 하는지 입니다.

    이걸로 정답과 오답을 가르는 것 자체가 문제는 아니겠지만... 튜토리얼 맨 처음에 나오는 헬로월드 문제의 예시 코드가 아래 방식으로 짜여있었고, 또 째능 수학 문제까지 푸는 동안 계속 아래 방식으로 풀었는데 아직까지 문제가 생긴 적이 없어서, 어쩌면 이 문제 채점 알고리즘에 버그가 있는거 아닐까? 라는 생각이 들어가지고 첫 글을 한번 써봤습니다.


    module Main where
    
    main :: IO ()
    main = do
      getLine
      interact (unlines . map hello . lines)
    
    hello :: String -> String    
    hello = ("Hello, " ++) . (++ "!")
    

    5년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.