Corrija o código: sem modificar um array

Implemente uma transformação que diminua os valores em camadas concêntricas. Para cada camada de 1 até times, diminua cada valor cujo índice seja maior ou igual a essa camada e menor que o tamanho do array menos essa camada.

int[] x = new[] { 3, 3, 3, 3, 3, 3, 3 };

Program.Change(x, 0); // new[] { 3, 3, 3, 3, 3, 3, 3 }
Program.Change(x, 1); // new[] { 3, 2, 2, 2, 2, 2, 3 }
Program.Change(x, 2); // new[] { 3, 2, 1, 1, 1, 2, 3 }
Program.Change(x, 3); // new[] { 3, 2, 1, 0, 1, 2, 3 }

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

Chamadas repetidas esperadas

Program.Change(x, 2); // new[] { 3, 2, 1, 1, 1, 2, 3 }
Program.Change(x, 2); // new[] { 3, 2, 1, 1, 1, 2, 3 }

Notas

  • O array de entrada deve permanecer inalterado após cada 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 Tapete concêntrico.