2012年4月4日水曜日

TopCoder SRM360 Div2 250Pts

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

ロボットが以下の命令に従って平面上を動いている。

命令意味
LEFT左に90度回転
RIGHT右に90度回転
TURN AROUND反対に向く(180度の回転と同じ)
LEFT X左にX度回転(X>0である)
RIGHT X右にX度回転(X>0である)
HALT停止、以後の操作は受け付けない
instructions[]という上の命令が要素となった文字列が与えられる。最初にロボットは北を向いている。ロボットの最終的な方位角を返せ。方位角とは北とロボットが向いている方向のなす角度である。方位角は時計回りに計測し、その値は0から359で与えられる。例えば、西の方向の方位角は270である。

私の解答はこちら。

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 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計