[プログラマー]クレーン兄抽選ゲーム


に答える

function solution(board, moves) {
    var answer = 0;
    let bucket = [];
    
    moves.forEach ((c)=>{
        for (var i=0;i<board.length;i++) {
        if (board[i][c-1]>0) {
            bucket.push(board[i][c-1]);
            board[i][c-1]=0
        if (bucket.length>1 && bucket[bucket.length-1]===bucket[bucket.length-2]) {
            answer+=2
            bucket.pop();
            bucket.pop();
                }
            break
            }
        }
    });
    return answer;
}
  • 2重forゲートを用いて二次元配列を検出する.ここでは、既存のPythonとは異なり、
  • クレーンが最上端の人形に遭遇した場合、抜きながら0でスペースを表し、その人の舌が桶に入れられ、最上端の人形と同じなら、答えに2を加えて爆発する.
  • 爆発した人行はpop()でarrayから除去される.
  • 残念なことに。

  • methodは、既存の2つのfor文を最大限に利用して異なるコードを記述しようとしたが、forEachメソッドのほか、既存の2つのfor文に似たコードを記述した.
  • +)他者コード

  • forEachを利用してこの問題の2次元配列を探索することができる.
  • moves.forEach(n => {
           const idx = board.findIndex(r => r[n-1] > 0);
            if(idx === -1) {
                return;
            }
      ...

    findIndexサンプルコード

    const array1 = [5, 12, 8, 130, 44];
    
    const isLargeNumber = (element) => element > 13;
    
    console.log(array1.findIndex(isLargeNumber));
  • forEachで既存クレーンの位置を示す動作を検索し、プレートを1つずつ検索し、0行から1つずつ確認し、クレーンがある列の値が0を超えると人形が発見される.
  • 他にも2回pop()を使用してバケツに存在するぬいぐるみを除去し、入れる前よりも一度pop()を使用すれば問題解決.
  • 完全なコード

    function solution(board, moves) {
        var answer = 0;
        var temp = [];
        moves.forEach(n => {
           const idx = board.findIndex(r => r[n-1] > 0);
            if(idx === -1) {
                return;
            }
            const target = board[idx][n-1];
            const prev = temp.length > 0 ? temp[temp.length-1] : undefined;
            if(target === prev){
                answer += 2;
                temp.pop();
            }else {
                temp.push(target);
            }
            board[idx][n-1] = 0;
        });
        return answer;
    }