文字列の反転
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