ピラミッド
与えられた文字列でピラミッドです。id:MAS3:20080210#p1の続編。
import Data.List main = do putStrLn $ pyramid "hoge" putStrLn $ pyramid "abracadabra" pyramid :: String -> String pyramid xs = pyramid' 0 xs pyramid' :: Int -> String -> String pyramid' _ [] = [] pyramid' n str@(_:xs) = pyramid' (n+1) xs ++ replicate n ' ' ++ (Data.List.intersperse ' ' str) ++ replicate n ' ' ++ "\n"
再帰を使わない版。横に長いので最後の文字の後ろの空白は省略。
import Data.List main = do putStrLn $ pyramid "hoge" putStrLn $ pyramid "abracadabra" pyramid :: String -> String pyramid xs = unlines $ reverse $ map (\(n,m) -> replicate m ' ' ++ (Data.List.intersperse ' ' n)) (zip ((init.tails) xs) [0..])