समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो एक सरणी arr को पहले और एकमात्र आर्गुमेंट के रूप में लेता है।
सरणी arr में निम्न दो प्रकार के स्ट्रिंग समीकरण होते हैं -
'X === Y'
'X !== Y'
यहां, X और Y कोई भी वेरिएबल हो सकते हैं।
हमारे फ़ंक्शन को जांचना चाहिए कि क्या सरणी में सभी समीकरणों के लिए, हम कुछ संख्या निर्दिष्ट कर सकते हैं ताकि सरणी में सभी समीकरण true हों।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const arr = ['X===Y', 'Y!==Z', 'X===Z'];
तो आउटपुट होना चाहिए -
const output = false;
आउटपुट व्याख्या:
कोई फर्क नहीं पड़ता कि हम X, Y और Z के लिए क्या मान चुनते हैं। सभी तीन समीकरण कभी संतुष्ट नहीं हो सकते।
उदाहरण
इसके लिए कोड होगा -
const arr = ['X===Y', 'Y!==Z', 'X===Z'];
const validateEquations = (arr = []) => {
const map = {};
const len = {};
const inValids = [];
const find = (item) => {
while(map[item] && item !== map[item]){
map[item] = map[map[item]];
item = map[item];
};
return item;
};
const add = (a, b) => {
const first = find(a);
const second = find(b);
if(first === second){
return;
};
if(len[first] < len[second]){
map[first] = second;
len[second] += len[first];
}else{
map[second] = first;
len[first] += len[second];
}
}
arr.forEach((item) => {
const X = item[0];
const Y = item[4];
map[X] = map[X] || X;
map[Y] = map[Y] || Y;
len[X] = len[X] || 1;
len[Y] = len[Y] || 1;
if(item[1] === '!'){
inValids.push([X, Y]);
}else{
add(X, Y);
};
});
return inValids.every(([a, b]) => find(a) !== find(b));
};
console.log(validateEquations(arr));
आउटपुट
कंसोल में आउटपुट होगा -
false