def toNum(col:String):Int = {
def alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def char2num(c:Char):Int = alpha.indexOf(c) + 1
def digit(n:Int): Stream[Int] = Stream.cons(n,digit(n*26))
val nums = col.reverse.map(char2num)
val zipped = nums.zip(digit(1))
zipped.foldLeft(0)((sum,elem) => sum + (elem._1 * elem._2))
}
def toStr(num:Int):String = {
val alpha = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def encode(n:Int):Int = {
val n = num % 26
n match {
case 0 => 26
case _ => n
}
}
val encoded = encode(num)
num match {
case num if (num <= 0) => ""
case num if (num == encoded) => alpha(encoded).toString
case _ => toStr((num - encoded)/ 26) + alpha(encoded).toString
}
}
(1 to 65535).map(n => n == toNum(toStr(n))).forall(n => n)