「ASCII Starts」をやってみる

30分プログラム、その769。anarchy golf - ASCII Starsをやってみました。
わりと素直に書けちゃったので、特に語ることないです。

使い方

scala> show(4)
res16: String =
   *
  ***
 *****
*******
 *****
  ***
   *

ソースコード

def wrap(s : String) =
  "*%s*".format(s)

def pad(w : Int, s : String) : String = {
  val left = ( w - s.size ) / 2
  "%s%s%s".format(" " * left, s, " " * (w - s.size - left))
}

def cross(n : Int) : List[String] = {
  val single = List("*")
  if(n == 1)
    single
  else
    single ++ cross(n-1).map(wrap(_)) ++ single
}

def show(n : Int) : String = {
  cross(n).map(pad(2*n-1, _)).mkString("\n")
}