問題:JavaScriptでトマトが腐敗するのにかかる時間
問題
唯一の引数として、数値の2次元配列arrを受け取るJavaScript関数を作成する必要があります。
配列内の数値は-
にすることができます-
空のセルを表す値0;
-
フレッシュトマトを表す値1;
-
腐ったトマトを表す値2。
毎分、腐ったトマトに(4方向に)隣接しているフレッシュトマトは腐ります。
私たちの関数は、新鮮なトマトがなくなるまで経過しなければならない最小分数を返すことになっています。これが不可能な場合は、代わりに-1を返す必要があります。
たとえば、関数への入力が-
の場合const arr = [ [2, 1, 1], [1, 1, 0], [0, 1, 1] ];
その場合、出力は-
になります。const output = 4;
出力の説明
経過時間 | トマトのステータス |
---|---|
1 | [ [2, 2, 1], [2, 1, 0], [0, 1, 1] ] |
2 | [ [2, 2, 2], [2, 2, 0], [0, 1, 1] ] |
3 | [ [2, 2, 2], [2, 2, 0], [0, 2, 1] ] |
4 | [ [2, 2, 2], [2, 2, 0], [0, 2, 2] ] |
例
このためのコードは-
になりますconst arr = [ [2, 1, 1], [1, 1, 0], [0, 1, 1] ]; const timeToRot = (arr = []) => { let fresh = 0; let count = -1; let curr = []; for(let i = 0; i < arr.length; i++){ for(let j = 0; j < arr[i].length; j++){ if(arr[i][j] === 1){ fresh += 1; }; if(arr[i][j] === 2){ curr.push([i, j]); }; }; }; if(!fresh){ return 0; }; while(curr.length > 0){ count += 1; const next = []; const rotten = (i, j) => { arr[i][j] = 2 next.push([i, j]) fresh -= 1 }; for(const [i, j] of curr){ if (arr[i - 1] && arr[i - 1][j] === 1) { rotten(i - 1, j); }; if (arr[i + 1] && arr[i + 1][j] === 1) { rotten(i + 1, j); }; if (arr[i][j - 1] === 1) { rotten(i, j - 1); }; if (arr[i][j + 1] === 1) { rotten(i, j + 1); }; } curr = next }; return fresh === 0 ? count : -1; }; console.log(timeToRot(arr));
出力
そして、コンソールの出力は-
になります4
-
JavaScriptの会議室2の問題
配列の配列が与えられます。各サブ配列は、会議の開始時刻と終了時刻を示す2つの要素で構成されています。 私たちの職務の仕事は、時間の衝突を避けて、一人が取ることができる会議の最大数を見つけることです。関数は最終的にこの数値を返す必要があります。 例- 会議時間を表す入力配列が-の場合 const arr = [[5, 40], [10, 20], [25, 35]]; その場合、出力は-になります。 const output = 2; 時間の重複により3つの会議すべてに参加することはできませんが、[10、20]と[25、35]には参加できます。 例 このためのコードは-になります c
-
JavaScriptでバナナ問題を配布する
問題 行列に並んでいる人がn人いるとすると、次のようにバナナを配りたいと思います- 最初の人に1本のバナナを、2人目の人に2本のバナナを与え、最後の人にn本のバナナを与えるまで続きます。 次に、行の最初に戻り、最初の人にn + 1本のバナナ、2人目の人にn + 2本のバナナを与え、最後の人に2*n本のバナナを与えるまで続けます。 このプロセスは、キャンディーがなくなるまで繰り返されます(毎回バナナをもう1つ与え、最後に到達した後、列の最初に移動します)。最後の人は残りのバナナをすべて受け取ります。 最初の引数として人数numを取り、2番目の引数としてバナナの数mを受け