[Aporte] javascript - Proporción de números
TickTack:
Hola a todos,
quizás esto pueda ser útil para algunas personas...
La proporción de números en el vector que son mayores, menores o iguales a 0:
Código
const NumberValue = {
GREATER_THAN_0: i => i > 0,
LESS_THAN_0: i => i < 0,
EQUAL_TO_0: i => i == 0
};
function printStatistics(...a) {
for (var key in NumberValue) {
if (NumberValue.hasOwnProperty(key)) {
console.log(key + " = " + sum(NumberValue[key],a).map(i => 1.0 / a.length).reduce((pv, cv) => pv + cv, 0));
}
}
}
function sum(callback, a) {
return a.filter(callback);
}
console.log(printStatistics(-5, 5, 4, 3, 2, 1, 0, -1));
Resultado:
Código:
GREATER_THAN_0 = 0.625
LESS_THAN_0 = 0.25
EQUAL_TO_0 = 0.125
Saludos
Mod Edit: Usar etiquetas GeSHI.
@XSStringManolo:
Qué recuerdos del colegio. Ahí va mi forma de hacerlo:
Código
let proporcion = (...nums) => {
let greater, less = 0, equal = 0;
for(let i in nums) {
nums[i] < 0 && ++less;
nums[i] == 0 && ++equal;
}
greater = ( nums.length - (less + equal) ) / nums.length;
less /= nums.length;
equal /= nums.length;
return [greater, less, equal];
}
alert(proporcion(-5, 5, 4, 3, 2, 1, 0, -1));
MinusFour:
Un poco más de golf pero se puede leer bien yo creo:
Código
let proporcion = (...arr) => {
let porcentaje = 1/arr.length;
return arr.reduce((total, actual) => (
actual > 0
? total.mayor += porcentaje
: actual < 0
? total.menor += porcentaje
: total.igual += porcentaje,
total),
{ mayor: 0, menor: 0, igual: 0});
};
TickTack:
Cita de: MinusFour en 9 Enero 2021, 02:35 am
Un poco más de golf pero se puede leer bien yo creo:
Código
let proporcion = (...arr) => {
let porcentaje = 1/arr.length;
return arr.reduce((total, actual) => (
actual > 0
? total.mayor += porcentaje
: actual < 0
? total.menor += porcentaje
: total.igual += porcentaje,
total),
{ mayor: 0, menor: 0, igual: 0});
};
Si a tu código le agrego Código:
console.log(proporcion(-5, 5, 4, 3, 2, 1, 0, -1));
entonces, en vez de mostrarme los resultados esperados, me muestra:
Citar
[object Object]
MinusFour:
Entonces tu console.log está haciendo algo diferente a los demás. Por lo general console.log imprime la estructura del objeto no su valor primitivo.
Una versión aún más reducida pero creo que no se lee tan bien.
Código
let proporcion = (...arr) => {
let porcentaje = 1/arr.length;
return arr.reduce((total, actual) => (
total[actual > 0
? 'mayor'
: actual < 0
? 'menor'
: 'igual'
] += porcentaje,
total),
{ mayor: 0, menor: 0, igual: 0});
};
Navegación
[#] Página Siguiente