Corrige el código: evita mutar un arreglo

Tu amigo está intentando implementar una transformación que disminuye los valores en capas concéntricas. Para cada capa desde 1 hasta times, disminuye cada valor cuyo índice sea mayor o igual que esa capa y menor que la longitud del arreglo menos esa capa.

std::vector<int> x{3, 3, 3, 3, 3, 3, 3};

// La implementación proporcionada disminuye los valores de x directamente.
change(x, 2); // {3, 2, 1, 1, 1, 2, 3}
change(x, 2); // incorrecto, porque x ya fue modificado

La función debe devolver el resultado transformado sin mutar la entrada original. Por lo tanto, llamarla repetidamente con la misma entrada debe devolver siempre el mismo resultado, y el x original debe permanecer sin cambios.

Llamadas repetidas esperadas

change(x, 2); // {3, 2, 1, 1, 1, 2, 3}
change(x, 2); // {3, 2, 1, 1, 1, 2, 3}

Notas

  • Si el comportamiento de la mutación te resulta confuso, ejecuta el método proporcionado e inspecciona la entrada después de una llamada.
  • Pista: crea una copia de la entrada antes de aplicar las disminuciones.
  • Esta transformación forma parte de una solución al problema del Tapete concéntrico.