import Data.List import qualified GCJ toAlien :: Int -> String -> String toAlien 0 lang = [lang !! 0] toAlien num lang = toAlien' num lang where toAlien' 0 lang = "" toAlien' num lang = (toAlien' (num `div` base) lang) ++ [lang !! (num `mod` base)] base = length lang fromAlien :: String -> String -> Int fromAlien [] lang = 0 fromAlien (c:cs) lang = (base ^ position) * index + (fromAlien cs lang) where base = length lang position = length cs index = case elemIndex c lang of Just x -> x Nothing -> 0 convertLine line = convert (parsed !! 0) (parsed !! 1) (parsed !! 2) where parsed = words line convert code lang1 lang2 = toAlien (fromAlien code lang1) lang2 main = do GCJ.process "A-small-practice.in" "A-small-practice.out" (convertLine) GCJ.process "A-large-practice.in" "A-large-practice.out" (convertLine)