Problem:
バドミントン

A君、Bさん、C君で久しぶりに遊ぶことになりました。 A君とBさんがプレイヤー、C君が審判になりバドミントンのシングルスのゲームをしました。3人で決めたルールは以下の通りです。

3 ゲームを行います。

11 点を先取した人が、そのゲームの勝者となります。

第 1 ゲームの最初のサーブはA君から始まりますが、次のサーブは直前のポイントを取った人が行います。

第 2 ゲーム、第 3 ゲームは前のゲームを取った人が最初のサーブを行います。

10 - 10 になって以降は 2 点差をつけた人が勝者となります。

全てのゲームが終わり、得点を見ようとしたのですが、審判のC君が得点を記録するのを忘れていました。しかし、サーブを打った人をきちんと記録していました。サーブ順の記録から得点を計算するプログラムを作成してください。ただし、二人が打ったサーブの回数の合計は 100 以下とし、サーブ順の記録は、サーブを打った人を表す "A" または "B" の文字列で表されます。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されま
す。各データセットは以下の形式で与えられます。

record1
record2
record3

i 行目に第 i ゲームのサーブ順を表す文字列が与えられます。

データセットの数は 20 を超えません。

Output

データセット毎に、i 行目に第 i ゲームのA君の得点とBさんの得点を空白区切りで出力してください。

Sample Input

ABAABBBAABABAAABBAA
AABBBABBABBAAABABABAAB
BABAABAABABABBAAAB
AABABAAABBAABBBABAA
AAAAAAAAAAA
ABBBBBBBBBB
0

Output for the Sample Input

11 8
10 12
11 7
11 8
11 0
0 11

Solution in Scala (judge verdict: Accepted)


import scala.annotation.tailrec
import scala.collection.mutable

object Main extends App {

  import scala.io.StdIn._

  solve
  @tailrec
  def solve: Unit = {
    val record = readLine.trim
    if (record == "0") return
    val (a, b) = calScore(record.tail.toList)
    println(s"$a $b")
    solve
  }
  @tailrec
  def calScore(serves: List[Char], pointA: Int = 0, pointB: Int = 0): (Int, Int) = {
    serves match {
      case Nil if pointA > pointB ⇒ (pointA + 1, pointB)
      case Nil ⇒ (pointA, pointB + 1)
      case 'A'::t ⇒ calScore(t, pointA + 1, pointB)
      case 'B'::t ⇒ calScore(t, pointA, pointB + 1)
    }
  }
  implicit class Extension[T](value :T){
    @inline
    def let[A](@inline func: T ⇒ A): A = func(value)
    @inline
    def also(@inline func: T ⇒ Unit): T = {func(value); value}
  }
}