Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Вычислить количество феноменов любви треугольников

#javascript #массивы #функции



  Spichonees (составленное имя) живут в стране Spichland, где нет пола. Spichonees
- большие любовники, поэтому каждый Spichonee любит любого другого Spichonee. К сожалению,
иногда бывают ситуации, когда Spichonee A любит Spichonee B, Spichonee B любит Spichonee
C и Spichonee C любит Spichonee A. Это явление называется любовным треугольником.
  
  задача
  Ваша задача - реализовать функцию getLoveTrianglesCount, которая вычисляет количество
феноменов любви треугольников. Функция принимает массив целых чисел как единственный
параметр. Целое число k на n-ом месте означает, что n-ый Spichonee любит kth Spichonee.




                               // 1  2  3  Spichonees
  let count = getLoveTrianglesCount([2, 3, 1]);
  console.log(count); // 1
  /**
    1st Spichonee loves 2nd Spichonee.
    2nd Spichonee loves 3rd Spichonee.
    3rd Spichonee love 1st Spichonee.
    There is love triangle.
  */




Ниже то что я сделал, но большая часть тестов не проходит  



function getLoveTrianglesCount(preferences = []) {
  // your implementation
  let length = preferences.length; 
  let count = 0;  
  for (let i = 0; i


Ответы

Ответ 1



Делаем три шага, а не два. Количество циклов втрое меньше числа участвующих. Каждый шаг проверяем зацикленность на себя. (Ещё стоит проверять на валидность числа в массиве) В развернутом виде: function getLoveTrianglesCount(preferences = []) { // your implementation let length = preferences.length; let count = 0; for (let i = 0; i

Ответ 2



Если я все правильно понял, а именно: Каждый элемент массива - это Spichonee Нужно найти в массиве множества вида - 3,4,5 или 12,13,14 и т.д. Посчитать их кол-во. То как вариант - https://codepen.io/qwerty_wasd/pen/MqVBzd const getLoveTrianglesCount = arrSpichonees => [...new Set(arrSpichonees.filter(e => e && arrSpichonees.includes(e+1) && arrSpichonees.includes(e+2)))].length; const getLoveTrianglesCount = arrSpichonees => [...new Set(arrSpichonees.filter(e => e && arrSpichonees.includes(e+1) && arrSpichonees.includes(e+2)))].length; console.log(getLoveTrianglesCount([6, 14, 12, 21, 3, 20, 7, 15, 16, 16, 14, 4, 11, 13, 18, 2, 1, 8, 3, 1, 121])); Вообще по идее - каждый Spichonee должен быть один, поэтому наверное уникальным массив лучше делать сразу. => const getLoveTrianglesCount = arrSpichonees => [...new Set(arrSpichonees)].filter(e => e && arrSpichonees.includes(e+1) && arrSpichonees.includes(e+2)).length;

Ответ 3



Насколько я понимаю, ваша задача "в лоб" решается так (полагаем, что выходные данные не нуждаются в валидации): function findCount(data){ var result = 0; data.unshift(0); for(let a = 1; a < data.length; a++){ let b = data[a]; let c = data[b]; result += a == data[c]; } return result/3; } let count = findCount([2, 3, 1, 5,6,4]); console.log(count);

Ответ 4



В одну строку: findCount=data=>data.filter((value,index,array)=>array[array[value-1]-1]==index+1).length/3;

Комментариев нет:

Отправить комментарий