#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;
Комментариев нет:
Отправить комментарий