前書き
(何らかの理由で)長方形の整数配列を半分に均等に分割するプログラムを作成する必要があります。このタスクは計算集約型ですが、幸いにも計算を実行するデュアルコアマシンがあります。並列処理の利点を最大限に活用するには、プログラムを半分に均等に分割し、各コアが部分から独立して実行できるようにします。
入出力
入力は、少なくとも1×1のサイズの非負整数の長方形の2D配列であり、適切な形式で取得されます。このような配列の分割は、各水平行を接頭辞と接尾辞(どちらも空の場合があります)に分割することで得られます。分割を有効にするには、2つの隣接する行を同じインデックスまたは隣接するインデックスで分割する必要があります。たとえば、配列を考えてみましょう
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)
入力のすべての有効な分割。
ルールとスコアリング
あなたは書くものと2つの、それらの間の任意の共有コードを持っていなければなら同じ言語でプログラム(フルプログラムまたは機能のいずれか)。それらをP1とP2と呼びましょう。プログラムP1は入力配列を取り、何かを出力します。プログラムP2はこれを入力として受け取り、上記のタスクの回答を入力配列に対して出力します。
スコアはP1およびP2のバイトカウントの最大値であり、スコアが低いほど優れています。
いくつかの説明:
- 2つの完全なプログラム、1つの関数と1つの完全なプログラム、または2つの関数を記述できます。
- 2つの完全なプログラムの場合、P1の出力全体が、Unixパイプラインと同様に、入力としてP2に送られます
P1 | P2
。2つの個別のソースファイルからコンパイル/解釈された場合、プログラムは正しく機能する必要があります。 - いずれかのプログラムが関数の場合、必要なボイラープレートコードを追加して完全なプログラムに変換され、上記のルールが適用されます。特に、2つの関数は共有補助関数、共有インポート文、または共有グローバル変数を使用できません。
テストケース
[[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