このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題についておおまかに説明する。
ロボットが以下の命令に従って平面上を動いている。
| 命令 | 意味 |
|---|---|
| LEFT | 左に90度回転 |
| RIGHT | 右に90度回転 |
| TURN AROUND | 反対に向く(180度の回転と同じ) |
| LEFT X | 左にX度回転(X>0である) |
| RIGHT X | 右にX度回転(X>0である) |
| HALT | 停止、以後の操作は受け付けない |
私の解答はこちら。
public class AzimuthMonitoring {
public int getAzimuth(String[] instructions) {
int angle = 0;
for( int i=0 ; i<instructions.length ; i++ ){
if( instructions[i].startsWith("LEFT ") ){
int a = Integer.parseInt(instructions[i].substring(5));
angle += (-a+360);
}else if( instructions[i].startsWith("RIGHT ") ){
int a = Integer.parseInt(instructions[i].substring(6));
angle += a;
}else if( instructions[i].startsWith("LEFT") ){
angle += 270;
}else if( instructions[i].startsWith("RIGHT") ){
angle += 90;
}else if( instructions[i].startsWith("TURN AROUND") ){
angle += 180;
}else if( instructions[i].startsWith("HALT") ){
break;
}
}
return angle%360;
}
}得点は230.88/250、中央値は約184点。1回のsubmitでシステムテストクリア。0から359までの値に収めるためにどのように処理を記述するかという点のみ考えさせられた。startWithメソッドを利用して命令を判別しているが、先に"LEFT X"でなく、"LEFT"を判別しようとすると失敗することには注意。
0 件のコメント:
コメントを投稿