Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ตรวจสอบความถูกต้องของสมการใน JavaScript


ปัญหา

เราต้องเขียนฟังก์ชัน 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