ピラミッド

30分プログラム、その83。http://ja.doukaku.org/8/。またしても、どう書く?.orgより。

$ pyramido 4
   *
  ***
 *****
*******

$ pyramido 5
    *
   ***
  *****
 *******
*********

$ pyramido 10
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************
import System
makeString :: Int->Char->String
makeString n c = take n $ cycle [c]

center :: Int->Char->String->String
center width c s= pad ++ s ++ pad
    where pad = makeString ((width - length s) `div` 2) c

pyramido :: Int->[String]
pyramido size = map (\n-> center (2*size-1) ' ' $ makeString n '*') $ take size [1,3..]

main = do n:_ <- getArgs
          mapM_ putStrLn $ pyramido (read n)
  • ちょっと勉強した直後で、まともに頭がうごきそうにないので、簡単なやつで
  • makeStringのようなやつはあってもよさそうなのにな