Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

189
Visualizações
Función JS que crea un rango de números (incluido el principio y el final) con un límite en los elementos del rango

Se le asigna un número inicial y final y el número máximo de elementos de salida permitidos. ¿Cómo crearía una matriz de salida con una distribución lo más uniforme posible, sin dejar de incluir el primer y el último punto en la salida?

Firma de función

function generatePoints(startingNumber, endingNumber, maxPoints) {}

Función salida deseada

generatePoints(0, 8, 5) // [0, 2, 4, 6, 8]

Esto es lo que probé hasta ahora
 function generatePoints(startingNumber, endingNumber, maxPoints) { const interval = Math.round((endingNumber - startingNumber) / maxPoints) let count = 0 let counter = 0 let points = [] while(count < maxPoints - 1) { points.push(counter) counter+=interval count++ } points.push(endingNumber) return points }

Técnicamente, esto crea el resultado correcto para el caso simple, pero se queda corto cuando se compara con la mayoría de los otros casos extremos debido al hecho de que detengo una iteración antes y luego agrego el punto final. Estoy pensando que la mejor manera de hacer esto (para crear una mejor distribución) es construir desde el centro de la matriz hacia afuera, en lugar de construir desde el inicio de la matriz y luego detener un elemento temprano y agregar el número final.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Tenga en cuenta esto:

 0 2 4 6 8 +-----+ +-----+ +-----+ +-----+ ABCD

Al dividir nuestro rango en intervalos con 5 puntos, incluidos los puntos finales, tenemos solo cuatro intervalos. Siempre será uno menos que el número de puntos. Podemos dividir nuestro rango de manera uniforme en estos rangos más pequeños, simplemente agregando continuamente el ancho de un intervalo, que es solo (endingNumber - startingNumber) / (maxPoints - 1) . Podemos hacerlo así:

 const generatePoints = (startingNumber, endingNumber, maxPoints) => Array .from ( {length: maxPoints}, (_, i) => startingNumber + i * (endingNumber - startingNumber) / (maxPoints - 1) ) console .log (generatePoints (0, 8, 5))

Simplemente construimos una matriz de la longitud correcta, usando el parámetro de índice para contar la cantidad de intervalos más pequeños que estamos usando.

No verificamos errores aquí, y si maxPoints fuera solo 1 , podríamos tener un problema. Pero eso es bastante fácil de manejar como quieras.


Pero hay una preocupación aquí. ¿Por qué el parámetro se llama maxPoints en lugar de points ? Si el número de puntos permitidos es variable, creo que necesitamos más requisitos.

about 4 years ago · Juan Pablo Isaza Relatório

0

No Math.round(interval) . En cambio Math.round(counter) en ese último momento.

La razón es que si ha agregado k intervalos, el error en lo que está haciendo puede ser de hasta 0.5*k . Pero si redondeas en el último minuto, el error nunca es mayor a 0.5 .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda