Coding_Gamesメモ_Detective_Pikaptcha_EP2

javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:

System.err.println( );

を使うとデバックしやすくなる。(エラー出力は評価に影響しない)

内容

マップを元の場所に戻るまで壁に沿って移動したとき、それぞれのマスを何度通るかを出力

ルール

side 側の壁に沿ってマップを移動し最初の位置(進行方向は無視していい)に戻ってくるまでマップ上のマスをそれぞれ何回通るかを出力する

インプット

1行目 マップの幅(width) と、奥行き(height)
2行目からheight行 0 と# と初期進行方向(>, v, <,^) の文字列で作られたマップ
(0) は通行可能なマス
(#) は壁、通行不可能
最終行 side ( L(左の壁に沿って進む) かR(右の壁に沿って進む) )

アウトプット

2行目からのマップの形式で通った回数を出力

使用したクラス

StringBuilder

(char) = StringBuilder.charAt( x )
x はint、 x番目の文字を出力

StringBuilder.replace(x , y , str )
(int)x 文字目から(int)y 文字目を(String)str で置き換える
x = y の時はinsertと同じ動作になる

String

(boolean) = String.equals(x); String == x String は == では判定できないので代わりに使用する。

(String) = String.valueOf(x); x をStringの文字列として出力( String.valueOf(123) → "123" )

Integer

(Integer) = Integer.valueOf(x)
xはint か数字を表すString
xをIntegerに変換する

考え方
マップを保存するときに、初期位置、移動方向を設定しておき、初期位置の記号を0に変更しておく
whileで{進行方向を決め、進行処理を行い、ループ終了判定を行う}

進行方向を決定する処理は上下左右をfinal int で設定しておき、
boolean配列で通行可能か結果を保存しておいて、
for と((進行方向) +i(forの変数) +4(マイナスにならないように) -1(進行方向左から判定) ) %4(結果を0~3 の範囲に)
if で保存してブレイクすることで求められる

進行処理前に進める場所がなかったときの処理が必要

デバック出力を出しすぎるとTest cases 08 Prim's で時間切れになる(1敗)

Coding_Games:https://www.codingame.com/
StringBuilder (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html
String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html
Integer (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html