Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptで敵を殺す


問題

2Dグリッドがあり、各セルが壁「W」、敵「E」、または空の「0」(数値ゼロ)のいずれかであるとします。 1つの爆弾だけを使用して殺すことができる最大の敵を返す関数を作成する必要があります。

爆弾は、壁が強すぎて破壊できないため、植えられた地点から壁にぶつかるまで、同じ行と列にいるすべての敵を殺します。

また、爆弾は空のセルにしか入れられないことにも注意する必要があります。たとえば、関数への入力が-

の場合
const arr = [
   ['0', 'E', '0', '0'],
   ['E', '0', 'W', 'E'],
   ['0', 'E', '0', '0']
];

その場合、出力は-

になります。
const output = 3;

出力の説明:

[1,1]に爆弾を置くと、最も高い3人の敵が殺されます。

このためのコードは-

になります
const arr = [
   ['0', 'E', '0', '0'],
   ['E', '0', 'W', 'E'],
   ['0', 'E', '0', '0']
];
const killEnemy = (arr = []) => {
   let m = arr.length;
   let n = m > 0 ? arr[0].length : 0;
   let result = 0, rows = 0;
   const cols = [];
   for (let i = 0; i < m; ++i) {
      for (let j = 0; j < n; ++j) {
         if (j === 0 || arr[i][j-1] === 'W') {
            rows = 0;
            for (let k = j; k < n && arr[i][k] != 'W'; ++k)
            if (arr[i][k] === 'E')
            rows += 1;
         }
         if (i === 0 || arr[i-1][j] === 'W') {
            cols[j] = 0;
            for (let k = i; k < m && arr[k][j] != 'W'; ++k)
               if (arr[k][j] === 'E')
                  cols[j] += 1;
         }
         if (arr[i][j] === '0' && rows + cols[j] > result)
         result = rows + cols[j];
      }
   }
   return result;
};
console.log(killEnemy(arr));

出力

そして、コンソールの出力は-

になります
3

  1. JavaScriptの約束

    JavaScriptのPromiseを使用すると、Promiseの作成時に値が事前にわからない非同期操作を実行できます。約束には、保留中、履行済み、拒否済みの3つの状態があります。 以下はJavaScriptのpromiseのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width,

  2. JavaScript WeakSet

    JavaScript WeakSetは、オブジェクトのコレクションを格納するために使用されます。セットのように、重複は保存されません。 WeakSetのメソッド- メソッド 説明 add(obj) weakSetに新しい値を追加します。 delete(obj) weakSetから値を削除します。 has(obj) weakSetオブジェクトに値が含まれているかどうかに応じて、trueまたはfalseを返します。 length() weakSetオブジェクトの長さを返します 以下はJavaScriptのWeakSetのコードです- 例