この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[]を破壊する書き方はあまり好きではないですね。コピーしたものを返したくなります。どちらが便利かは状況に依るのでしょうが。