Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

161
Vistas
Haga que un índice de matriz se desborde o se desborde dentro de un rango (incluidos los números negativos)

Estoy implementando un intérprete de brainfuck en Javascript. Estoy representando la memoria con una matriz y me gustaría tener la opción de limitar los índices de la matriz dentro de un rango. Si el índice está fuera de este rango, quiero que pase por encima o por debajo de los límites. Tengo un pequeño problema para describir el problema correctamente. Aquí hay un ejemplo de lo que estoy pensando:

 lbound: 0, ubound: 10, index: 10, result: 0 lbound: 0, ubound: 10, index: 11, result: 1 lbound: -10, ubound: 0, index: -10, result: 0 lbound: -10, ubound: 0, index: -11, result: -1 lbound: -5, ubound: 15, index: 16, result: -4 lbound: 5, ubound: 15, index: 26, result: 6

Podría hacer una función algo como:

 if (index < lbound) { // underflow return ubound - index - index * Math.round(index / lbound) } if (index > ubound) { // overflow return lbound + index - index * Math.round(index / ubound) } return index

Pero eso es demasiado ingenuo y se pierde el caso de dividir por cero. Supongo que tengo un enfoque equivocado aquí. Básicamente, estoy buscando una fórmula matemática que asigne un número específico dentro de un rango que incluya números negativos. Pero no una simple reasignación. Se debe calcular el número correcto de sobreimpulsos o subimpulsos. Por lo tanto, las partes enteras de lbound o ubound deben restarse del índice. Y finalmente la diferencia se tiene que sumar o restar a lbound o ubound.

Cualquier ayuda sería genial. :)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Básicamente módulo es la operación que estás buscando. Solo que lo está haciendo un poco más complicado, ya que también desea admitir números negativos, por lo que se debe agregar un poco de "rotación" del resultado del módulo a la "fórmula".

Esta función a continuación debería hacer el truco:

 function keepIndexInsideRange(index, lbound, ubound) { var range = Math.abs(ubound - lbound); var result = index % range; if (lbound < 0 && index > ubound) { result = -(range - result); } return result; } console.log('should return 0', keepIndexInsideRange(10, 0, 10)); // OK console.log('should return 1', keepIndexInsideRange(11, 0, 10)); // OK console.log('should return 0', keepIndexInsideRange(-10, -10, 0)); // OK console.log('should return -1', keepIndexInsideRange(-11, -10, 0)); // OK console.log('should return -9', keepIndexInsideRange(1, -10, 0)); // OK console.log('should return -4', keepIndexInsideRange(16, -5, 15)); // OK console.log('should return 6', keepIndexInsideRange(26, 5, 15)); // OK

Puedes jugar con él aquí https://stackblitz.com/edit/typescript-lxw3ai?file=index.ts (solo expande la consola en el lado derecho de la pantalla).

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda