この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 件のコメント:
コメントを投稿