この課題は、2018年5月の「Language of the Month」イベントの一部として、MATL言語の機能の一部に関連しています。
前書き
MATLでは、多くの2入力機能が働く要素単位で放送。これは次のことを意味します。
要素単位(またはベクトル化):関数は、サイズが一致する2つの配列を入力として受け取ります。関数によって定義された操作は、対応するエントリの各ペアに適用されます。たとえば、修正後表記を使用する場合:
[2 4 6] [10 20 30] +
与え ouputをを
[12 24 36]
これは多次元配列でも機能します。表記
[1 2 3; 4 5 6]
は2
×3
配列(行列)を表します1 2 3 4 5 6
これは
2
、最初の次元(垂直)と3
2番目(水平)に沿ったサイズを持ちます。例えば[2 4 6; 3 5 7] [10 20 30; 40 60 80] *
[20 80 180; 120 300 560]
ブロードキャストまたは(シングルトン拡張):2つの入力配列のサイズは一致しませんが、一致しない各次元では、配列の1つにsizeがあり
1
ます。この配列は、サイズを一致させるために、他の次元に沿って暗黙的に複製されます。そして、上記のように要素ごとに操作が適用されます。たとえば、サイズが1
×2
と3
×の2つの入力配列を考えます1
。[10 20] [1; 2; 5] /
ブロードキャストのおかげで、これは
[10 20; 10 20; 10 20] [1 1; 2 2; 5 5] /
そしてそれは与える
[10 20; 5 10; 2 4]
同様に、サイズが
3
×2
と3
×の場合1
(ブロードキャストは2番目の次元にのみ作用するようになりました)、[9 8; 7 6; 5 4] [10; 20; 30] +
[19 18; 27 26; 35 34]
次元の数は異なる場合もあります。たとえば、サイズが3×2と3×1×5の入力は互換性があり、3×2×5の結果が得られます。実際、サイズ3×2は3×2×1と同じです(暗黙的に後続のシングルトン次元が多数あります)。
一方、最初の次元に沿ったサイズはandであり、それらは等しくなく、いずれも等しくないため、一対の
2
× 配列2
と3
×1
配列はエラーになります。2
3
1
モジュラー放送の定義
モジュラーブロードキャストは、サイズが一致しないものがない場合でも機能するブロードキャストの一般化です1
。たとえば、次の2
× 2
および3
× 1
配列を関数の入力として考えます+
。
[2 4; 6 8] [10; 20; 30] +
規則は次のとおりです。各次元について、その次元に沿って小さい配列は、他の配列のサイズと一致するようにモジュール式(循環)に複製されます。これは、上記と同等になります
[2 4; 6 8; 2 4] [10 10; 20 20; 30 30] +
結果で
[12 14; 26 28; 32 34]
2番目の例として、
[5 10; 15 20] [0 0 0 0; 1 2 3 4; 0 0 0 0; 5 6 7 8; 0 0 0 0] +
生産するだろう
[5 10 5 10; 16 22 18 24; 5 10 5 10; 20 26 22 28; 5 10 5 10]
一般に、サイズがa
× b
とc
×の入力は、サイズが× d
の結果をmax(a,b)
返しmax(c,d)
ます。
チャレンジ
上記で定義したモジュラーブロードキャストを使用して、2次元配列の追加を実装します。
配列は長方形(不規則ではない)で、負でない整数のみを含み、少なくとも1
各次元でサイズを持ちます。
追加規則:
どんな合理的な手段でも入力と出力を取ることができます。それらの形式は通常どおり柔軟です。
すべてのプログラミング言語で、プログラムまたは機能が許可されます。標準的な抜け穴は禁止されています。
バイト単位の最短コードが優先されます。
テストケース
以下は;
、行セパレータとして使用します(上記の例のように)。各テストケースには、2つの入力が表示され、次に出力が表示されます。
[2 4; 6 8]
[10; 20; 30]
[12 14; 26 28; 32 34]
[5 10; 15 20]
[0 0 0 0; 1 2 3 4; 0 0 0 0; 5 6 7 8; 0 0 0 0]
[5 10 5 10; 16 22 18 24; 5 10 5 10; 20 26 22 28; 5 10 5 10]
[1]
[2]
[3]
[1; 2]
[10]
[11; 12]
[1 2 3 4 5]
[10 20 30]
[11 22 33 14 25]
[9 12 5; 5 4 2]
[4 2; 7 3; 15 6; 4 0; 3 3]
[13 14 9;12 7 9;24 18 20;9 4 6;12 15 8]
[9 12 5; 5 4 2]
[4 2 6 7; 7 3 7 3; 15 6 0 1; 4 0 1 16; 3 3 3 8]
[13 14 11 16; 12 7 9 8; 24 18 5 10; 9 4 3 21; 12 15 8 17]
[6 7 9]
[4 2 5]
[10 9 14]
1
× n
(など[1 2 3]
)またはn
× 1
(など[1; 2; 3]
)