2012年2月23日木曜日

TopCoder SRM336 Div2 250Pts

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

Pig Latinというのは、文字を暗号化する簡単な手法である。我々は"Vowel Latin"という手法を開発した。これは単語から母音を除去し、その除去した順を維持したまま後ろに除去した文字をつけるという手法である。母音というのは"a"、"i"、"u"、"e"、"o"とその大文字である。並べ替えたことによって、大文字・小文字が変わるということはない。VowelLatinという文字列wordを与えたときに、その単語をVowel Latinという手法で暗号化したときの単語を返すメソッドを作成せよ。

私の解答はこちら。

public class VowelLatin {

 public String translate(String word) {
  char[] vowels = {'a', 'i', 'u', 'e', 'o', 'A', 'I', 'U', 'E', 'O'};
  StringBuffer sb = new StringBuffer();
  StringBuffer ret = new StringBuffer();
  for( int i=0; i<word.length() ; i++ ){
   char c = word.charAt(i);
   boolean isVowel = false;
   for( int j=0 ; j<vowels.length ; j++ ){
    if( c == vowels[j] ){
     isVowel = true;
     sb.append(c);
     break;
    }
   }
   if( isVowel == false ){
    ret.append(c);
   }
  }
  return ret.toString() + sb.toString();
 }
 /*
 // cが母音か否かの判定は、これで綺麗に書ける
 boolean isVowel(char c){
  return "aiueoAIUEO".indexOf(c) >= 0;
 }
 */
}

得点は245.64/250、中央値は約232点。最後に書いたコメントの方が母音かそうでないかの判定ロジックがすっきりしますね。上のコードはC言語の癖がついて取れていないだけです ^^;

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計