アクセスの長さ


問題の説明


4つのコマンドでゲームキャラクターを移動したいです.コマンドは次のとおりです.
  • U:上へ
  • D:下段
  • R:右一マス
  • L:左一マス
  • キャラクタは、座標平面(0,0)の位置から開始します.座標平面の境界は、左上角(-5、5)、左下角(-5、-5)、右上角(5、5)および右下角(5、-5)からなる.

    たとえば、コマンドが「ULURRDLLU」の場合

  • 1番から7番まで:


  • 8番から9番まで:

  • このとき,ゲームキャラクタが歩いた道の中でキャラクタが初めて歩いた道の長さを要求する.たとえば、上記の例では、ゲームキャラクタが移動する長さは9ですが、キャラクタが最初に歩く長さは7です.(8、9番命令で移動した道はすでに2、3番命令で通っています)
    ただし、座標平面の境界を超えたコマンドは無視されます.
    たとえば、コマンドがLULLLUの場合
  • 1号命令から6号命令に従って移動し、7,8号命令を無視します.さらに9番の命令に従って行動します.
  • このときキャラクターが初めて歩く道の長さは7です.
    コマンドにパラメータdirsが付与されると、ゲームキャラクタが初めて歩く道の長さを求め、returnのsolution関数を完了する.

    せいげんじょうけん

  • dirsは、「U」、「D」、「R」および「L」を除いて文字列形式で与えられる.
  • dirsの長さは500以下の自然数である.
  • I/O例


    dirsanswer"ULURRDLLU"7"LULLLLLLU"7

    に答える

    function solution(dirs) {
        const move = { L: [-1, 0], R: [1, 0], U: [0, 1], D: [0, -1] };
        let now = [0, 0];
        let route = new Set();
        
        for (let dir of dirs) {
            let nowX = now[0] + move[dir][0];
            let nowY = now[1] + move[dir][1];
            
            if (nowX > 5 || nowX < -5 || nowY > 5 || nowY < -5) continue;
            
            route.add("" + now[0] + now[1] + nowX + nowY);
            route.add("" + nowX + nowY + now[0] + now[1]);
            
            now = [nowX, nowY];
        }
        
        return route.size / 2
    }