JSFiddle - React, Tailwind, and code Playground

by lastuniverse

JavaScript

// даны 2 множества X и Y


// x - ученики
const X = [1,2,3,4];

// y - парты
const Y = [1,2];


// соответсвия делаем как программную функцию с 2-я аргументами
const conformity_1_pair = (x,y)=>{
	// соответствие задано набором пар
  // является правильным отображением
  const list = [
    [1,1],
    [2,1],
    [3,2],
    [4,2]
  ];
  return list.some(item=>(item[0]===x&&item[1]===y));
}

const conformity_1_func = (x,y)=>{
	// соответствие задано мат.функцией на интервале
  // является правильным отображением
  if(x<1 || x>4) return 0;
  return y===Math.floor((x+1)/2);
}


const conformity_2_pair = (x,y)=>{
	// соответствие задано набором пар
  // не является правильным отображением
  const list = [
    [1,1],
    [2,1],
    [3,2],
    [4,2],
    [1,2]
  ];
  return list.some(item=>(item[0]===x&&item[1]===y))?1:0;
}

const conformity_2_func = (x,y)=>{
	// соответствие задано системой уравнений на интервале
  // не является правильным отображением
  if(x<1 && x>4) return 0;
  
  return (y===Math.floor((x+1)/2)) || (x===1&&y===2);
}




// реализация функции проверки правильности отображения
function compare(listX, listY, conformityFunc){
   const res = [];
   listX.forEach(x=>listY.forEach(y=>{
   		const isPresent = conformityFunc(x,y);
      res[x]=(res[x]||0)+(isPresent?1:0);
      /* console.log(x,y,isPresent); */
   }));
   return res.every(v=>v===1);
}


// проверяем
console.log(compare(X, Y, conformity_1_pair)); // true - является правильным отображением
console.log(compare(X, Y, conformity_1_func)); // true - является правильным отображением
console.log(compare(X, Y, conformity_2_pair)); // false - нявляется правильным отображением
console.log(compare(X, Y, conformity_2_func)); // false - нвляется правильным отображением