#pragma once

#include <vector>
#include <algorithm>
#include <iostream>

namespace alg::tasks
{
  // Есть набор чисел, необходимо из них создать такую перестановку
  // при котором разности их величин будутминимально отличаться.
  // Т.е. как бы максимально их уравнять
  inline void run()
  {
    // { x, y } 
    // x - число
    // y - просто номер чтоб не потеряться когда увидим перестановку
    std::vector<std::pair<int, int>> data { { 1, 0 }, { 2, 1 }, { 3, 2 }, { 4, 3 } };

    std::sort(data.begin(), data.end());
    auto n = data.size();

    // работа такая
    // берем четные в порядке возрастания
    for (std::size_t i = 0; i < n; i += 2)
      std::cout << data[i].second << ' ';

    // потом нечетные в порядке убывания
    for (int i = n - 1- n % 2; i >= 1; i -=2)
      std::cout << data[i].second << ' ';
    std::cout << std::endl;

    // циферки выводим
    for (std::size_t i = 0; i < n; i += 2)
      std::cout << data[i].first << ' ';

    for (int i = n - 1- n % 2; i >= 1; i -=2)
      std::cout << data[i].first << ' ';
    std::cout << std::endl;
  }
}

