Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ปัญหา:เวลาที่มะเขือเทศใช้ในการเน่าเปื่อยใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ 2 มิติของตัวเลข arr เป็นอาร์กิวเมนต์เดียว

ตัวเลขในอาร์เรย์สามารถเป็น −

  • ค่า 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