このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について、おおまかに説明する。ひさびさに練習できる環境になったので、問題をといてみました。
あなたは今、古いコードを新しいコンパイラ用に変換している。"->"を"."に書き換えるのであるが、コメント部では置き換えてはならない。コメントの部分は//で始まり、行末で終わりである。program[]というコードの文字列型配列が与えられたとき、そのコードを変換した結果を返せ。
public class AccessChanger {
public String[] convert(String[] program) {
for( int i=0 ; i<program.length ; i++ ){
int posComment = program[i].indexOf("//");
if( posComment < 0 ){ // コメントがない場合
program[i] = program[i].replaceAll("->", ".");
}else{
// コメント前だけ取り出して置換
String tmp = program[i].substring(0, posComment);
tmp = tmp.replaceAll("->", ".");
// コメント以降を結合
program[i] = tmp + program[i].substring(posComment);
}
}
return program;
}
}得点は218.66/250。正直、入力となるprogram[]を破壊する書き方はあまり好きではないですね。コピーしたものを返したくなります。どちらが便利かは状況に依るのでしょうが。
