国内予選の問題の解答
http://ccserv.adm.ehime-u.ac.jp/ICPC/jp/
なんと出力例が公開されているではないか。
問題Eと問題Fについては正解していなかったので、
公開している解答が合ってるかわからんかったんだよなぁ。
ということで、チェックしてみたところ、
サイトにアップしたプログラムはEとFどっちとも4つの入力
すべてに対して正しい答えが出せていた。
これで安心して公開しておくことが出来るのである。
ところで、問題Eは解答が実数値で、誤差が0.001を超えなければOK
な問題なので、チェックにdiffが使えなかった。
Haskellで適当にチェックプログラムを作ったのだが、
PerlでもRubyでもなく、Haskell。
もはや私の中でデフォルト言語となりつつある…
import System main = do args@[f1,f2] <- getArgs cs <- mapM readFile args let d = map (map read . words) cs let diffs = [t | t@(_,[r,s]) <- zip [1..] d, abs (r-s) > 0.001] if null diffs then putStrLn "Congratulations!!! correct answer." else mapM_ (\(l,[r,s]) -> do putStrLn $ "Differnt at line " ++ show l ++ ":" putStrLn $ adjast 20 f1 ++ show r putStrLn $ adjast 20 f2 ++ show s putStrLn "") diffs where adjast n s = take n $ s ++ replicate n ' '