文字列の反転

30分プログラム、その757。anarchy golf - Mirroring Characterにインスパイアされて、文字列の反転をやってみました。
基本的にreverseと同じですが、括弧だけは対応するものに置き換えるようです。例えば、"f(x)"を反転させると"(x)f"になります。

使い方

scala> mirror("f(x)")
res13: String = (x)f

scala> mirror("#include <stdio.h>")
res14: String = <h.oidts> edulcni#

ソースコード

val map : List[Pair[Char,Char]] = List('(' -> ')',
				       '{' -> '}',
				       '<' -> '>')

def mirrorChar( c : Char) = {
  map.flatMap{case (left, right) =>
    if(c == left)
      List(right)
    else if(c == right)
      List(left)
    else
      List()
  } match {
    case List(x) => x
    case List()  => c
  }
}

def mirror(s : String) : String =
  s.map(mirrorChar(_)).reverse.mkString