Чередовать числа в два ряда

Я думаю, что у меня пукнул мозг, потому что я не могу понять простую формулу, чтобы иметь возможность сортировать последовательность чисел в определенном порядке, чтобы ее можно было напечатать 2 числа на листе бумаги (одно число на одной половине и второй числа на второй половине), поэтому, когда распечатанную стопку бумаги разрезают пополам, разделяя числа, а затем эти половинки соединяют вместе, числа располагаются по порядку.

Итак, допустим, у меня есть 5 чисел: 3,4,5,6,7, ожидаемый результат будет 3,6,4,7,5 или 0,1,2,3,4,5,6,7 станет 0,4,1,5,2,6,3,7 Мой мыслительный процесс таков:

  1. создать цикл от 0 до общего количества чисел
  2. если текущий шаг четный, то прибавляем к нему общее число деленное на 2

Очевидно, я пропустил один или два шага, или для этого есть простая математическая формула, и, надеюсь, кто-то сможет подтолкнуть меня в правильном направлении.

Это то, что у меня есть до сих пор, это не работает должным образом, если начальный номер установлен на 1 или 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.info(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>

P.S. Извините, за название, не мог придумать ничего лучше, чтобы резюмировать это.

Чтобы уточнить, последовательность [ 3, 4, 5, 6, 7 ] станет [ 3, 6 ], [4, 7], [5]?

Tibrogargan 08.04.2022 23:42

По сути да, но их не нужно разделять, последовательность/порядок - это то, что мне нужно.

vanowm 08.04.2022 23:56

Можете ли вы уточнить, что происходит для последовательности четной длины?

fny 08.04.2022 23:56

@fny, один номер на обоих концах будет один, вот и все.

vanowm 08.04.2022 23:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете получить значение из индекса

  • если нечетное, используя длину и индекс, сдвинутый на единицу вправо (например, деление на два и получение целочисленного значения), или
  • если даже по индексу разделить на два.

function order(array) {
    return array.map((_, i, a) => a[(i % 2 * a.length + i) >> 1]);
}

console.info(...order([3, 4, 5, 6, 7]));
console.info(...order([0, 1, 2, 3, 4, 5, 6, 7]));

Я не думаю, что это работает для четных чисел.

fny 09.04.2022 00:12

Впечатляет, спасибо! Чтобы вставить вашу формулу в мой код, это будет: let result = +start.value + ((i % 2 * (count+1) + i) >> 1); @fny, я думаю, что это работает нормально

vanowm 09.04.2022 00:12

Другие вопросы по теме