Algorytm rzeźbienia szwu lub jego bardziej złożona wersja służy do zmiany rozmiaru obrazu z uwzględnieniem treści w różnych programach graficznych i bibliotekach. Zagrajmy w golfa!
Twój wkład będzie prostokątną dwuwymiarową tablicą liczb całkowitych.
Twój wynik będzie tej samej tablicy, o jedną kolumnę węższą, z jednym wpisem usuwanym z każdego wiersza, przy czym te wpisy reprezentują ścieżkę od góry do dołu z najniższą sumą wszystkich takich ścieżek.
https://en.wikipedia.org/wiki/Seam_carving
Na powyższej ilustracji wartość każdej komórki jest pokazana na czerwono. Czarne liczby są sumą wartości komórki i najniższej czarnej liczby w jednej z trzech komórek powyżej (wskazanych przez zielone strzałki). Podświetlone na biało ścieżki to dwie ścieżki o najniższej sumie, obie o sumie 5 (1 + 2 + 2 i 2 + 2 + 1).
W przypadku, gdy dla najniższej sumy są powiązane dwie ścieżki, nie ma znaczenia, którą usuniesz.
Dane wejściowe należy pobierać ze standardowego wejścia lub jako parametr funkcji. Można go sformatować w sposób wygodny dla wybranego języka, w tym nawiasów i / lub ograniczników. Podaj w odpowiedzi, w jaki sposób oczekuje się danych wejściowych.
Dane wyjściowe powinny być ustawione na standardowe wyjście w jednoznacznie ograniczonym formacie lub jako funkcja zwracająca wartość w twoim języku równoważną tablicy 2d (która może zawierać zagnieżdżone listy itp.).
Przykłady:
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)
EDYCJA: Wszystkie liczby będą nieujemne, a każdy możliwy szew będzie miał sumę pasującą do 32-bitowej liczby całkowitej ze znakiem.