バックグラウンド
Jellyの算術原子は自動的にベクトル化します。実際には、X + Yはいつでも明確に定義されているX及びYは、数値または数値の不揃い配列です。Jellyのソースコードは、ジェネリックベクトライザーを使用してこの動作を実装しますが、この課題では、整数とネストされた整数配列の追加のみを考慮します。
定義
深さを定義Xをとして0あればxはのように、整数である1が整数の(おそらく空の)平坦アレイであり、そして場合としてN + 1は少なくとも一つの深さの要素が含まれている場合、Nと深さのない要素kは> n個。
このように、1は深さ0、[]と[1]、[1、1]は深さ1、[[]、[]]と[[1]、[1]]と[[1]]と[1 、[]]は深さ2、[1、[1、[1]]]は深さ3などです。
操作x + yは、次のように定義されます。
場合のxとyは深持っ0を、その合計を返します。
場合、XとYが等しいが正の深さを有する、再帰的に適用+のすべての項目にXとの対応する項目Y。
xとyの長さが異なる場合、長い配列の末尾を合計の配列に追加します。
結果を返します。
場合のxの深さがより厳密に小さいYの深さ、再帰的に適用されます+にXとのすべてのアイテムのy、その結果を返します。
yの深さが厳密にxより小さい場合は、逆の操作を行います。
たとえば、操作[1、[2、3]、[4]] + [[[10、20]、[30]、40、50]、60]を考えます。
左引数の深さは2で、右引数の深さは3なので、[1、[2、3]、[4]] + [[10、20]、[30]、40、50を計算します]および[1、[2、3]、[4]] + 60。
[1、[2、3]、[4]]および[[10、20]、[30]、40、50]は両方とも深さが2であるため、1 + [10、20]、[2、3 ]を計算します+ [30]及び[4] + 40。
1 + [10、20] = [1 + 10、1 + 20] = [11、21]
[2、3] + [30] = [2 + 30、3] = [32、3]
3には一致する要素がないため、変更されないことに注意してください。
[4] + 40 = [4 + 40] = [44]
50は、結果がので、整合素子を有していない[[[11、21]、[32]、[3]、[44]、50] 。[1、[2、3]、[4]] + 60 = [1 + 60、[2、3] + 60、[4] + 60] = [61、[2 + 60、3 + 60]、[ 4 + 60]]、[61、[62、63]、[64]]になります。
最終結果は[[[11、21]、[32、3]、[44]、50]、[61、[62、63]、[64]]]です。
仕事
上記で定義したように、2つの整数、2つのネストされた整数配列、またはそれらの組み合わせを入力として受け取り、それらの合計を返すプログラムまたは関数を作成します。
言語に複数の配列のようなタイプ(リスト、タプル、ベクトルなど)がある場合は、それらのいずれかを答えに選択できます。戻り値の型は引数の型と一致する必要があります。
退屈で他社の追随を許さないソリューションを防ぐために、言語にこの正確な操作が組み込まれている場合は、その言語を使用しないでください。
他のすべての言語のすべての組み込みが許可されます。選択した言語でこれが許可されている場合、組み込みの追加をオーバーロードおよび/または再定義できます。
これはcode-golfであるため、バイト単位の最短コードが優先されます。
テストケース
0 + 0 = 0
[-1, 0, -1] + [1] = [0, 0, -1]
[] + [0] = [0]
[] + 0 = []
[] + [] = []
[[], 0] + [] = [[], []]
[1, 2, 3] + 10 = [11, 12, 13]
[1, 2, 3] + [10] = [11, 2, 3]
[1, 2, 3] + [10, [20]] = [[11, 12, 13], [21, 2, 3]]
[1, 2, 3, []] + [10, [20]] = [11, [22], 3, []]
[1, [2, [3, [4]]]] + [10, [20]] = [[11, [21]], [[12, [22]], [13, [24]]]]
より多くのテストケースを生成するには、このJellyプログラムを使用できます。