何故.....codeforces(解決済)
Haskellで今日も、簡単なものを解いてみた。
が、なぜかruntime errorとかで通らない
手元でやるとどれも一瞬で答え出るし、環境もそれほどよくはないから問題はないはずなんだけど
import Control.Monad main = do n <- getContents forM_ (map (fromCentimeter.read) $ lines n) putStrLn fromCentimeter :: Int -> String fromCentimeter n = show (feet n) ++ " " ++ show (inch n) inch :: Int -> Int inch n = case n `mod` 3 of 2 -> 1+ div n 3 - 12 * feet n otherwise -> (div n 3) - 12 * feet n feet :: Int-> Int feet n = div (div n 3) 12
これで10数個くらいは通るのだけど、途中でRUNTIME ERRORが出る..... 詳細を見ると、不調とかではなく、答えが出力されていない。 そんな無茶苦茶なコードでもないし、さっぱりわけがわからない。 どなたか分かる方いたら教えてください
ということで悩んでいたのですが、
getContentsで改行文字も読み込んでしまっているためだろう、
と、route150さんに意見を頂きました。
確かにgetContentsからではそうなりますね.....忘れてた
実際、getLine使って書きなおすと巧く行きました!
上のコードでは、
inch == 12
のときの対応が出来ていないのでそこを修正したものがこちら
import Control.Monad main = do n <- getLine forM_ (map (fromCentimeter.read) $ lines n) putStrLn fromCentimeter :: Int -> String fromCentimeter n = show (feet n + div (inch n) 12) ++ " " ++ show (inch n `mod` 12) inch :: Int -> Int inch n = case n `mod` 3 of 2 -> 1+ div n 3 - 12 * feet n otherwise -> (div n 3) - 12 * feet n feet :: Int-> Int feet n = div (div n 3) 12
解決しました!
route150さん、ありがとうございます