縦書き変換
30分プログラム、その649。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_208にインスパイアされて、縦書き変換を作ってみました。でも、日本語はできません。
普通に書いててもつまんないよねー、とか思って、ArrowやらHUnitやらを使ってます。どうせ時間をかけるなら、日本語表示にチャレンジすべきだったと思います。しまったなぁ。
使い方
$ echo "puts\nhello\nworld" | tate w h p o e u r l t l l s d o
ソースコード
import Control.Arrow import Data.List import Test.HUnit.Base import Test.HUnit.Text sameSize :: a -> [[a]] -> [[a]] sameSize pad xs = map (\x-> take n $ x ++ repeat pad) xs where n = maximum $ map length xs tate :: [String] -> [String] tate = sameSize ' ' >>> transpose >>> map (intersperse ' ' >>> reverse) test1 = TestCase (assertEqual "empty" [] $ tate []) test2 = TestCase (assertEqual "empty" ["g d a","h e b","i f c"] $ tate ["abc","def","ghi"]) test3 = TestCase (assertEqual "empty" ["g d a","h e b","i f "] $ tate ["ab","def","ghi"]) tests = runTestTT $ TestList [TestLabel "test1" test1, TestLabel "test2" test2, TestLabel "test3" test3] main = interact (unlines.tate.lines)