このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
ウサギたちはプログラミングは好きだが、プログラミングの試験が好きではない。黒、グレー、白の3匹のウサギは最終試験を終えた。ウサギたちが問題について議論している間に、教授がやってきて、"黒いやつ、お前は0点だ、知識を確かなものにするために、グレーと白が取った点数の最大値の合計点を計算するプログラムを書け"といった。
試験はN問からなるものであった。ウサギたちは同じ問題を提示される。各問題に対し、その答えとしてA~Zのアルファベットの大文字を書かなければならなかった。問題に対し、1つの文字のみが正しいものとされ、他の25文字は正しくない回答となっている。正解は1点となり、ウサギの得た点数は問題に正解した数に一致する。
black、gray、whiteという黒、グレー、白のウサギが書いた回答を表す文字列が与えられる。それぞれの文字列はN文字からなり、文字列のi番目の文字はそれぞれのウサギのi番目の回答を表すものとする。黒ウサギの点数が0のときに、グレーと白のウサギが獲得しうる点数の合計の最大値を返せ。
私の回答は以下の通り。
public class BunnyExamAfter { public int getMaximum(String black, String gray, String white) { int points = 0; for( int i=0 ; i<black.length() ; i++ ){ if( black.charAt(i) == gray.charAt(i) && black.charAt(i) == white.charAt(i) ){ // pass }else if( black.charAt(i) != gray.charAt(i) && black.charAt(i) == white.charAt(i) ){ points++; }else if( black.charAt(i) == gray.charAt(i) && black.charAt(i) != white.charAt(i) ){ points++; }else if( black.charAt(i) != gray.charAt(i) && black.charAt(i) != white.charAt(i) && gray.charAt(i) == white.charAt(i) ){ points += 2; }else if( black.charAt(i) != gray.charAt(i) && gray.charAt(i) != white.charAt(i) ){ points++; } } return points; } }
得点は220.72/250、1回のsubmitでシステムテストクリア。