Вступ
Ви отримали завдання написати програму, яка розділяє прямокутний масив з цілим числом рівномірно навпіл (з будь-якої причини). Це завдання обчислювально обчислювальне, але, на щастя, у вас є двоядерна машина для виконання розрахунків. Щоб максимізувати переваги паралелізму, ви вирішили розділити програму рівномірно навпіл і дозволити кожному ядру виконувати одну з частин незалежно від іншої.
Вхід і вихід
Ваш вхід - це прямокутний 2D масив неотримних цілих чисел розміром не менше 1 × 1 , узятий у будь-якому розумному форматі. Розщеплення такого масиву виходить шляхом розщеплення кожної горизонтальної рядка в якості префікса і суфікс (кожний з яких може бути порожніми). Щоб розділення було дійсним, два сусідні рядки повинні бути розділені на один і той же індекс або сусідні індекси. Наприклад, розглянемо масив
2 4 5 5 6 3
9 7 1 7 7 0
0 0 3 6 7 8
1 2 4 7 6 1
6 6 8 2 0 0
Це дійсне розділення:
2;4 5 5 6 3
;9 7 1 7 7 0
;0 0 3 6 7 8
1;2 4 7 6 1
6 6;8 2 0 0
Це також дійсне розділення:
2 4 5 5 6 3;
9 7 1 7 7;0
0 0 3 6 7;8
1 2 4 7;6 1
6 6 8;2 0 0
Це недійсне розділення:
2 4;5 5 6 3
9 7 1;7 7 0
0;0 3 6 7 8
1 2;4 7 6 1
6 6;8 2 0 0
Ваш вихід повинен бути мінімальним значенням
abs(sum_of_prefixes - sum_of_suffixes)
над усіма дійсними розділеннями вхідних даних.
Правила та оцінка
Ви повинні написати дві програми (або повні програми, або функції) однією і тією ж мовою, які не повинні мати спільного коду між ними. Назвемо їх Р1 і Р2 . Програма P1 приймає вхідний масив і щось виводить . Програма P2 сприймає це щось як вхід і видає відповідь на вищезазначене завдання для вхідного масиву.
Ваш бал - це максимум кількості байтів P1 і P2 , нижчий бал - кращий.
Деякі роз’яснення:
- Ви можете написати дві повні програми, одну функцію та одну повну програму, або дві функції.
- У випадку двох повних програм весь вихід P1 подається на P2 як вхід, як у конвеєрі Unix
P1 | P2
. Програми повинні правильно функціонувати, якщо їх компілювати / інтерпретувати з двох окремих вихідних файлів. - Якщо будь-яка програма є функцією, вона перетворюється на повну програму шляхом додавання необхідного кодового коду, і до неї застосовується вищевказане правило. Зокрема, дві функції не можуть використовувати спільні допоміжні функції, спільні заяви про імпорт або спільні глобальні змінні.
Тестові справи
[[1]] -> 1
[[4,5],[8,3]] -> 4
[[8],[11],[8],[10],[4]] -> 1
[[5,7,0,9,11,2,1]] -> 7
[[146,194,71,49],[233,163,172,21],[121,173,14,302],[259,169,26,5],[164,30,108,37],[88,55,15,2]] -> 3
[[138,2,37,2],[168,382,33,77],[31,199,7,15],[192,113,129,15],[172,88,78,169],[28,6,97,197]] -> 7
[[34,173,9,39,91],[169,23,56,74,5],[40,153,80,60,28],[8,34,102,60,32],[103,88,277,4,2]] -> 0
[[65,124,184,141],[71,235,82,51],[78,1,151,201],[12,24,32,278],[38,13,10,128],[9,174,237,113]] -> 2
[[164,187,17,0,277],[108,96,121,263,211],[166,6,57,49,73],[90,186,26,82,138],[173,60,171,265,96]] -> 8