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 modificadoLa 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.