Creo que estoy teniendo un pedo cerebral, porque no puedo encontrar una fórmula simple para poder clasificar una secuencia de números en un orden específico para que pueda imprimirse 2 números por hoja de papel (un número en un medio y segundo número en la segunda mitad), por lo que cuando la pila de papel impresa se corta por la mitad, separando los números, y luego estas mitades se juntan, los números estarían en secuencia.
Entonces, digamos que tengo 5 números: 3,4,5,6,7, el resultado esperado sería 3,6,4,7,5 o 0,1,2,3,4,5,6,7 sería convertirse en 0,4,1,5,2,6,3,7 Mi proceso de pensamiento es:
Obviamente, me estoy perdiendo un paso o dos aquí, o hay una fórmula matemática simple para esto y espero que alguien pueda guiarme en la dirección correcta.
Esto es lo que tengo hasta ahora, no funciona correctamente si el número de inicio se establece en 1 o 3
function show() { console.clear(); for(let i = 0, count = end.value - start.value, half = Math.round(count/2); i <= count; i++) { let result = Math.round((+start.value + i) / 2); if (i && i % 2) result = result + half -1; console.log(i, "result:", result); } } //ignore below for(let i = 0; i < 16; i++) { const o = document.createElement("option"); o.value = i; o.label = i; start.add(o); end.add(o.cloneNode(true)); } start.value = 0; end.value = 7; function change(el) { if (+start.value > +end.value) { if (el === start) end.value = start.value; else start.value = end.value; } } <select id="start" oninput="change(this)"></select> - <select id="end" oninput="change(this)"></select> <button onclick="show()">print</button>PD Lo siento, sobre el título, no se me ocurrió nada mejor para resumir esto.
Podría obtener el valor del índice
function order(array) { return array.map((_, i, a) => a[(i % 2 * a.length + i) >> 1]); } console.log(...order([3, 4, 5, 6, 7])); console.log(...order([0, 1, 2, 3, 4, 5, 6, 7]));