続・縦書き

縦書き?の続き


行が異なる長さでもいけるようにした

import List

main = putStrLn . unlines . transpose . normalize . reverse . lines =<< getContents

-- 長さを同じにする
normalize :: [String] -> [String]
normalize s = fillSpace s (maxLength s)

-- 一番長い文字列の長さ取得
maxLength :: [String] -> Int
maxLength s = length $ maximumBy (\x y -> (length x) `compare` (length y)) s

-- スペースで埋める
fillSpace :: [String] -> Int -> [String]
fillSpace [] _ = []
fillSpace (x:xs) len = (x ++ replicate (len - (length x)) ' ') : fillSpace xs len

うーん、けっこう長くなっちゃった(16行...関数宣言とかコメントとか改行を除けば6行)


このテキストを食わせると

Hello World
Akira

こう出力されます

AH
ke
il
rl
ao
  
 W
 o
 r
 l
 d