2011年11月30日水曜日

TopCoder SRM269 Div2 250Pts

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

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計