Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 방정식의 유효성 확인

<시간/>

문제

배열 arr을 첫 번째이자 유일한 인수로 사용하는 JavaScript 함수를 작성해야 합니다.

배열 arr은 다음 두 종류 중 하나의 문자열 방정식으로 구성됩니다. -

  • 'X ===Y'

  • X!==Y'

여기서 X와 Y는 임의의 변수가 될 수 있습니다.

우리 함수는 배열의 모든 방정식에 대해 배열의 모든 방정식이 참이 되도록 일부 숫자를 할당할 수 있는지 여부를 확인해야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
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