Excel列名変換問題をHaskellでやってみた

Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編) - give IT a tryを今勉強中のHaskellでやってみました。

import System.Environment
import Data.Char

main :: IO ()
main =  do (x:y:_) <- getArgs
           case read x of
             0 -> putStrLn . show . str2int $ y
             1 -> putStrLn . int2str . read $ y
           
str2int   :: String -> Int
str2int s =  sum [(ord c - 64) * 26 ^ i | (c, i) <- zip (reverse s) [0..]]

int2str   :: Int -> String
int2str n = case (n `mod` 26, n `div` 26) of
              (0, 0) -> []
              (0, q) -> int2str (q-1) ++ [chr (26 + 64)]
              (r, q) -> int2str q ++ [chr (r + 64)]