समस्या
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना आवश्यक है जो संख्याओं की 2-डी सरणी लेता है, एआर, एकमात्र तर्क के रूप में।
सरणी में संख्याएँ हो सकती हैं -
-
मान 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