15.06.2022, 10:25
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Найти количество одинаковых пар в массиве
Помогите пожалуйста поправить в коде так, чтобы всё отработало. Вот мой код:
function numberOfPairs(gloves) {
let count = 0;
for (let i = 0; i < gloves.length; i++) {
for (let j = 0; j < i; j++) {
if ((gloves[i] == gloves[j])) {
count++;
}
}
}
return count;
}
console.log(numberOfPairs(["red", "green", "red", "blue", "blue"])); // 2
console.log(numberOfPairs(["gray", "green", "red", "blue", "yellow"])); // 0
console.log(numberOfPairs(["gray", "green", "red", "green", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); // 3
Если все элементы одинаковы, то у меня выводит число 15 в последнем вызове тут console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); - должно быть 3.
|
|
15.06.2022, 10:37
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
NovichokJS,
что такое пара?
|
|
15.06.2022, 10:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
NovichokJS,
function numberOfPairs(gloves) {
const obj = {};
let count = 0;
for (let el of gloves) {
obj[el] = (obj[el]||0)+1;
obj[el] %= 2;
obj[el] || count++;
}
return count;
}
console.log(numberOfPairs(["red", "green", "red", "blue", "blue"])); // 2
console.log(numberOfPairs(["gray", "green", "red", "blue", "yellow"])); // 0
console.log(numberOfPairs(["gray", "green", "red", "green", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "yellow"])); // 1
console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); // 3
|
|
15.06.2022, 10:47
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Сообщение от рони
|
NovichokJS,
что такое пара?
|
это пара одинаковых цветов в массиве - считается если 2 значчения равны в массиве, тогда к count прибавляем 1. В случае console.log(numberOfPairs(["red", "red", "red", "red", "red", "red"])); // 3
у нас 3 одинаковых пары, поэтому должно вернуть количество равное 3.
|
|
15.06.2022, 10:54
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
function numberOfPairs(gloves) {
let tmp = {};
for (let item of gloves) tmp[item] = ++tmp[item] || 1;
return Object.values(tmp).reduce((a, v) => a + Math.floor(v / 2), 0);
}
|
|
15.06.2022, 11:26
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Сообщение от Vlasenko Fedor
|
function numberOfPairs(gloves) {
let tmp = {};
for (let item of gloves) tmp[item] = ++tmp[item] || 1;
return Object.values(tmp).reduce((a, v) => a + Math.floor(v / 2), 0);
}
|
круто, можете объяснить подробно что тут происходит tmp[item] = ++tmp[item] || 1;
|
|
15.06.2022, 11:28
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от NovichokJS
|
строки 5, 6 ,7
|
obj[el] = (obj[el]||0)+1;
если название(el) встретилось добавляем единицу в счётчик названия(obj[el])
obj[el] %= 2;
obj[el] || count++;
если счётчик названия делится на два, увеличиваем общий счётчик.
почти тоже что
if(obj[el] %= 2 == 0) count++;
|
|
15.06.2022, 11:29
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от рони
|
obj[el] = (obj[el]||0)+1;
|
тоже самое
Сообщение от NovichokJS
|
tmp[item] = ++tmp[item] || 1;
|
|
|
15.06.2022, 12:09
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Сообщение от рони
|
obj[el] = (obj[el]||0)+1;
если название(el) встретилось добавляем единицу в счётчик названия(obj[el])
obj[el] %= 2;
obj[el] || count++;
если счётчик названия делится на два, увеличиваем общий счётчик.
почти тоже что
if(obj[el] %= 2 == 0) count++;
|
ок, но единственное еще это пока полностью не могу понять obj[el] = (obj[el]||0)+1;
Можно как-то по-другому это написать? возможно с if
|
|
15.06.2022, 12:23
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
я кажется понял. Эта фраза obj[el] = (obj[el]||0)+1; тоже саме что и эта:
if (obj[el] !== undefined) { obj[el] += 1 } else { obj[el] = 1 }
|
|
|
|