2011年9月17日土曜日

TopCoder SRM246 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。

新しい計算ソフトウェアの開発をしている。ソフトウェアのテストの段階において、小数点の文字が場合によっては違うというということに気付いた。さらに、テストケースにおいて、役に立たない空白文字が含まれていることもある。そのような数値はフォーマットを統一したい。数値はnumbers[]という文字列型の配列で表されている。空白(アスキーコードで32)をすべて取り除き、数字の桁でない文字は"."に置き換えよ。それ以外は変更を加えてはならない。

なお、numbers[]は少なくとも1つ以上の桁(数値)を持ち、空白でも数字でもない文字は高々1であるものとする。本当はもう少し条件があるのだが、実装上はこれで問題無い。

私の解答はこちら。

public class CalcTest {
 public String[] uniform(String[] numbers) {
  for( int i=0 ; i<numbers.length ; i++ ){
   numbers[i] = numbers[i].replaceAll(" ", ""); // 空白は取り除く
   // 数字でない文字は.に変換。[^0-9]は\\Dに代用可能
   numbers[i] = numbers[i].replaceAll("[^0-9]", "."); 
  }
  return numbers;
 }
}

得点は242.70/250、中央値は約226点。否定の正規表現を調べながら解きました。Javaの利用者はこのような正規表現による置換を利用して解答をしている人がちらほらといました。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計