09. Aggregate Elements (JS)
Здравейте,
може ли малко помощ за следната задача:
Write a program that performs different operations on an array of elements. Implement the following operations:
- - calculates the sum all elements from the input array
- - calculates the sum of the inverse values (1/ai) of all elements from the array
- - concatenates the string representations of all elements from the array
The input comes as an array of number elements.
The output should be printed on the console on a new line for each of the operation.
|
|
Input |
Output |
[2, 4, 8, 16] |
30 0.9375 24816 |
Кода ми е следния, като при мен във VS code получавам само верни първия и последния резултат, но не и втория, който е с инвърснатата стойност, а Judge на всеки ред ми изписва NAN. https://judge.softuni.bg/Contests/Practice/Index/2749#8 (трябва да се събмитне без първото let)
let aggregateElements = (...array) => {
let numbersArray = array.map(Number);
let sum = numbersArray.reduce((a, b) => a + b);
let inverseValue = numbersArray.reduce((a, b) => 1/a + 1/b);
let stringConcat = numbersArray.join('');
console.log(sum);
console.log(inverseValue.toFixed(4));
console.log(stringConcat);
}
aggregateElements(2, 4, 8, 16);
@ svephoto , благодаря Ви за примерното решение, което е 100/ 100 в Judge. :)
При мен след като поставя вашия код ми дава следното - "Uncaught TypeError: array.map is not a function
Process exited with code 1 ".
Ако сложа трите точки ( ...array ) е ок.
Но не разбирам : този код и този защо не дават едни и същи резултати:
let inverseValue = numbersArray.reduce((a, b) => 1/a + 1/b);
и това:
for (let i = 0; i < numbersArray.length; i++) {
inverseValuesSum += 1 / numbersArray[i];
}
Получаваш
"Uncaught TypeError: array.map is not a function
Process exited with code 1".
понеже трябва да подадеш входните данни не като поредица от числа, a като масив, с квадратните скоби, както бях посочил и в първия коментар, ето така -> aggregateElements([2, 4, 8, 16]); и съответно array да бъде без spread оператора "..." отпред. Така ще проработи коректно, опитай.
Да, сега вече разбрах!
И в Judge, и при мен всичко е точно.
Благодаря за отделеното време!
Моля, няма проблем.
Иначе този вариант за сумиране на inverse стойностите с reduce работи коректно:
let inverseValuesSum = numbersArray.reduce((a, b) => a + 1 / b, 0);
Снощи за по-лесно и бързо ми хрумна първо с един цикъл да ги извъртя и сумирам, но сега като поразцъках и reduce-a, и той също заработи.
Цялото решение: https://pastebin.com/J7pke8bJ.