Vấn đề
Chúng tôi bắt buộc phải viết một hàm JavaScript lấy một mảng, arr, làm đối số đầu tiên và duy nhất.
Mảng arr bao gồm các phương trình chuỗi thuộc một trong hai loại sau -
-
‘X ===Y’
-
X! ==Y ’
Ở đây, X và Y có thể là bất kỳ biến nào.
Hàm của chúng ta phải kiểm tra xem đối với tất cả các phương trình trong mảng, chúng ta có thể gán một số nào đó để tất cả các phương trình trong mảng mang lại kết quả đúng hay không.
Ví dụ:nếu đầu vào của hàm là -
const arr = ['X===Y', 'Y!==Z', 'X===Z'];
Sau đó, kết quả đầu ra phải là -
const output = false;
Giải thích đầu ra:
Bất kể chúng ta chọn giá trị nào cho X, Y và Z. Cả ba phương trình đều không bao giờ được thỏa mãn.
Ví dụ
Mã cho điều này sẽ là -
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));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
false