ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ arr เป็นอาร์กิวเมนต์เดียว
อาร์เรย์ arr ประกอบด้วยสมการสตริง 2 รูปแบบ:
'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