diff --git a/haskell/column.hs b/haskell/column.hs new file mode 100644 index 0000000..69f3b03 --- /dev/null +++ b/haskell/column.hs @@ -0,0 +1,38 @@ +import qualified Data.Text as T + +splitOn :: String -> String -> [String] +splitOn x y = map T.unpack $ T.splitOn (T.pack x) $ T.pack y + +transpose:: [[a]] -> [[a]] +transpose ([]:xs) = [] +transpose x = (map head x) : transpose (map tail x) + +addEmpty :: Int -> [a] -> [a] -> [a] +addEmpty x v y + | ysize == x+1 = y + | ysize <= x = addEmpty x v (y ++ v) + | otherwise = [] + where ysize = length y + +formatLine :: [String] -> [String] +formatLine x = map (addEmpty nb " ") x + where nb = maximum $ map length x + +formatLines :: [[String]] -> [[String]] +formatLines x = map formatLine x + +completeMatrix :: [[String]] -> [[String]] +completeMatrix m = map (addEmpty nb [""]) m + where nb = maximum $ map length m + +column :: [[String]] -> [[String]] +column x = transpose $ formatLines $ transpose $ completeMatrix x + +putToLines :: [[String]] -> [String] +putToLines x = map (foldr (++) " ") x + +main = do + content <- getContents + -- print $ column $ map (splitOn " ") $ lines content + -- print $ putToLines $ column $ map (splitOn " ") $ lines content + putStr $ unlines . putToLines $ column $ map (splitOn " ") $ lines content