L'algorithme de sculpture de couture, ou une version plus complexe de celui-ci, est utilisé pour le redimensionnement d'image sensible au contenu dans divers programmes graphiques et bibliothèques. Jouons au golf!
Votre entrée sera un tableau d'entiers rectangulaire à deux dimensions.
Votre sortie sera le même tableau, une colonne plus étroite, avec une entrée supprimée de chaque ligne, ces entrées représentant un chemin de haut en bas avec la somme la plus faible de tous ces chemins.
https://en.wikipedia.org/wiki/Seam_carving
Dans l'illustration ci-dessus, la valeur de chaque cellule est indiquée en rouge. Les nombres noirs sont la somme de la valeur d'une cellule et le plus petit nombre noir dans l'une des trois cellules au-dessus (indiqué par les flèches vertes). Les chemins surlignés en blanc sont les deux chemins de somme les plus faibles, tous deux avec une somme de 5 (1 + 2 + 2 et 2 + 2 + 1).
Dans le cas où il y a deux chemins liés pour la somme la plus basse, peu importe celui que vous supprimez.
L'entrée doit provenir de stdin ou d'un paramètre de fonction. Il peut être formaté d'une manière appropriée à la langue de votre choix, y compris les crochets et / ou les délimiteurs. Veuillez préciser dans votre réponse comment la saisie est attendue.
La sortie doit être stdout dans un format délimité sans ambiguïté, ou comme une valeur de retour de fonction dans l'équivalent de votre langue à un tableau 2D (qui peut inclure des listes imbriquées, etc.).
Exemples:
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: Les nombres seront tous non négatifs, et chaque couture possible aura une somme qui tient dans un entier 32 bits signé.