2012年1月14日土曜日

TopCoder SRM312 Div2 250Pts

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

エスペラント語で1から99までの数字を書けというのが問題。命名規則は次の通り。1から10は{"unu", "du", "tri", "kvar", "kvin", "ses", "sep", "ok", "nau", "dek"}で与えられる。11から19は1から9の数字の前に"dek "(空白に注意)を付けたものである。20から29は"dudek "(これも空白に注意)を1から9の数字の前につけたものである。dekの前についているduは2である。30以上は20から29と同様のルールで命名されている。さて1から99までの値の1つを受け取ったとき、その値をエスペラント語にして返せ。

私の解答はこちら。

public class EsperantoNumbers {

 public String nameThisNumber(int x) {
  String[] num = {"", "unu", "du", "tri", "kvar", "kvin", "ses", "sep", "ok", "nau", "dek"};
  if( x >= 1 && x<=10 ){
   return num[x];
  }else if( x <=19 ){
   return "dek" + " " + num[x%10];
  }else if( x <= 99){
   if( x % 10 == 0 ){
    return num[x/10] +"dek";
   }else{
    return num[x/10] +"dek" + " " + num[x%10];
   }
  }
  return null;
 }

}

得点は229.05/250、中央値は約205点。1人撃墜して+50点。先頭に空文字をつける解答は少数派という印象がありました。この方が配列の添え字が単純になるから良いかと思ったのですが。この問題のテストケースは本来99通りしかないのですが、121通りテストケースが用意されていました。なぜでしょうね。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計