Corrija o código: evite alterar um array

Seu amigo está tentando implementar uma transformação que decrementa os valores em camadas concêntricas. Para cada camada de 1 até times, decremente cada valor cujo índice seja maior ou igual a essa camada e menor que o tamanho do array menos essa camada.

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

// A implementação fornecida decrementa os valores de x diretamente.
change(x, 2); // {3, 2, 1, 1, 1, 2, 3}
change(x, 2); // incorreto, porque x já foi alterado

A função deve retornar o resultado transformado sem alterar a entrada original. Portanto, chamá-la repetidamente com a mesma entrada deve retornar sempre o mesmo resultado, e o x original deve permanecer inalterado.

Chamadas repetidas esperadas

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

Notas

  • Se o comportamento da mutação estiver confuso, execute a abordagem fornecida e inspecione a entrada depois de uma chamada.
  • Dica: faça uma cópia da entrada antes de aplicar os decrementos.
  • Esta transformação faz parte de uma solução para o problema do Tapete concêntrico.