El promedio de los antípodas

Dado un arreglo de enteros, crea antipodesAverage(const std::vector<int>&) y genera un arreglo más pequeño en tres pasos:

  1. Divide el arreglo en dos mitades exteriores de igual tamaño. Si su longitud es impar, descarta el elemento central para que ambas mitades sean iguales.
  2. Invierte la segunda mitad y suma cada valor de la primera mitad con el valor correspondiente de la segunda mitad invertida.
  3. Divide entre dos cada suma resultante.

Ejemplos

antipodesAverage(std::vector<int>{1, 2, 3, 4}) ➞ std::vector<double>{2.5, 2.5}
// La parte izquierda [1, 2] se empareja con la parte derecha invertida [4, 3]; las sumas [5, 5] se convierten en [2.5, 2.5].

antipodesAverage(std::vector<int>{1, 2, 3, 4, 5}) ➞ std::vector<double>{3, 3}
// Descarta el valor central 3. La parte izquierda [1, 2] se empareja con [5, 4]; las sumas [6, 6] se convierten en [3, 3].

antipodesAverage(std::vector<int>{-1, -2}) ➞ std::vector<double>{-1.5}
// (-1 + -2) / 2 = -1.5.

Notas

  • Cada entrada contiene al menos dos números.
  • Los valores de entrada son números enteros, positivos o negativos, pero los promedios devueltos pueden ser valores de punto flotante.
  • Los pasos pueden implementarse por separado o combinarse sin cambiar el resultado.