Skip to content

Instantly share code, notes, and snippets.

Created April 18, 2012 08:13
Show Gist options
  • Save anonymous/2411966 to your computer and use it in GitHub Desktop.
Save anonymous/2411966 to your computer and use it in GitHub Desktop.
package gtan
object Succ {
def main(args: Array[String]) {
assert(succ("") == "")
assert(succ("3") == "4")
assert(succ("R2D3") == "R2D4")
assert(succ("R293") == "R294")
assert(succ("R2D9") == "R2E0")
assert(succ("A99") == "B00")
assert(succ("Z99") == "AA00")
assert(succ("Zz99") == "AAa00")
assert(succ("9Z") == "10A")
println("finished")
}
def succ(n: String): String = {
n match {
case "" => ""
case _ =>
val calc = n.foldRight(("1", "")) { (ch, result) =>
val ddd = result match {
case ("", _) => ("", ch.toString)
case _ => ch match {
case x if (x >= '0' && x < '9' || x >= 'a' && x < 'z' || x >= 'A' && x < 'Z') =>
("", (ch + 1).toChar.toString)
case '9' => ("1", "0")
case 'z' => ("a", "a")
case 'Z' => ("A", "A")
case _ => ("", "?") // should not happen
}
}
(ddd._1, ddd._2 + result._2)
}
calc._1 + calc._2
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment