Алгоритм різьблення швів або його більш складна версія використовується для змісту розміру зображення в різних графічних програмах і бібліотеках. Давайте в гольф!
Вашим входом буде прямокутний двовимірний масив цілих чисел.
Ваш вихід буде тим самим масивом, на один стовпчик вужчим, з одним записом, видаленим з кожного рядка, ті записи, які представляють шлях зверху вниз з найменшою сумою всіх таких шляхів.
https://en.wikipedia.org/wiki/Seam_carving
На наведеній вище ілюстрації значення кожної комірки зображено червоним кольором. Чорні числа - це сума значення комірки і найменше чорне число в одній із трьох комірок над нею (на що вказують зелені стрілки). Білі виділені контури - це два найменших шляху шляху, обидва з сумою 5 (1 + 2 + 2 та 2 + 2 + 1).
У випадку, коли є два шляхи, прив'язані до найменшої суми, не має значення, яку ви видалите.
Введення слід брати з stdin або як функціональний параметр. Він може бути відформатований зручним для обраної вами мовою, включаючи дужки та / або роздільники. Будь ласка, вкажіть у своїй відповіді, як очікується вхід.
Вихід повинен бути stdout в однозначно обмеженому форматі або як функція повернення значення у вашій мові, еквівалентному 2d масиву (який може включати вкладені списки тощо).
Приклади:
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)
РЕДАКТУВАННЯ: Усі цифри будуть негативними, і кожен можливий шов матиме суму, яка вписується у підписане 32-бітове ціле число.