O algoritmo de escultura de costura, ou uma versão mais complexa, é usado para redimensionar imagens com reconhecimento de conteúdo em vários programas gráficos e bibliotecas. Vamos jogar golfe!
Sua entrada será uma matriz bidimensional retangular de números inteiros.
Sua saída será a mesma matriz, uma coluna mais estreita, com uma entrada removida de cada linha, aquelas entradas representando um caminho de cima para baixo com a menor soma de todos esses caminhos.
https://en.wikipedia.org/wiki/Seam_carving
Na ilustração acima, o valor de cada célula é mostrado em vermelho. Os números pretos são a soma do valor de uma célula e o menor número preto em uma das três células acima dela (apontada pelas setas verdes). Os caminhos destacados em branco são os dois caminhos de soma mais baixa, ambos com uma soma de 5 (1 + 2 + 2 e 2 + 2 + 1).
Em um caso em que há dois caminhos vinculados para a soma mais baixa, não importa qual você remove.
A entrada deve ser obtida do stdin ou como um parâmetro de função. Ele pode ser formatado de maneira conveniente para o idioma de sua escolha, incluindo colchetes e / ou delimitadores. Especifique na sua resposta como a entrada é esperada.
A saída deve ser stdout em um formato delimitado sem ambiguidade, ou como um valor de retorno de função no equivalente em seu idioma a uma matriz 2D (que pode incluir listas aninhadas, etc.).
Exemplos:
Input:
1 4 3 5 2
3 2 5 2 3
5 2 4 2 1
Output:
4 3 5 2 1 4 3 5
3 5 2 3 or 3 2 5 3
5 4 2 1 5 2 4 2
Input:
1 2 3 4 5
Output:
2 3 4 5
Input:
1
2
3
Output:
(empty, null, a sentinel non-array value, a 0x3 array, or similar)
EDIT: Os números serão todos não negativos, e cada costura possível terá uma soma que cabe em um número inteiro de 32 bits assinado.