Google Code Jam のラウンド進行

簡易的に.

まずは Qualification Round.参加者数,通過者数に制限は無い.3 問出題され,いずれかの問題について small input,large input の両方に対する出力が正しければ通過.

次に Round 1.これは 3 つのサブラウンドで構成される.3 sub-round のいずれも,Qualification Round を通過した人で,それ以前のサブラウンドで(BならAで,CならAやBで)通過してない人なら無制限参加,1000 人通過.

後の Round 2,Round 3 はそのまま.Round 2 は Round 1 のどっかで通過した 3000 人参加,500 人通過.Round 3 はその 500 人が参加,25 人通過.

と,ここまでがオンライン(ネット上)で開催され,25 人は(2010年なら) Dublin へ連れていかれてそこで Final round を行う.

サブラウンドの関係をプログラム的に言えば

function roundQualify()
{
  if( (ProblemA.small == "OK" && ProblemA.large == "OK") ||
      (ProblemB.small == "OK" && ProblemB.large == "OK") ||
      (ProblemC.small == "OK" && ProblemC.large == "OK") )
    reutrn "通過";
  return "敗退";
}
function round1a(), round1b(), round1c()
{
  if( rank() <= 1000 ) return "通過";
  return "敗退";
}
function round1()
{
  if( round1a() == "通過" || round1b() == "通過" || round1c() == "通過" )
    return "通過";
  return "敗退";
}
function round2()
{
  if( rank() <= 500 ) return "通過";
  return "敗退";
}
function round3()
{
  if( rank() <= 25 ) return "通過";
  return "敗退";
}
function GCJ()
{
  if( roundQualify() == "敗退" ) return "敗退";
  if( round1() == "敗退" ) return "敗退";
  if( round2() == "敗退" ) return "敗退";
  if( round3() == "敗退" ) return "敗退";
  return rank();
}

という感じになる.class 宣言したらもうちょっと筋の通った書き方ができたかもしれないけど本筋が見えなくなるので止めた.