背景
果冻的算术原子自动矢量化。实际上,只要x和y y是数字或数字的参差不齐的数组。Jelly的源代码使用通用矢量化程序实现了此行为,但是对于这一挑战,我们将仅考虑将整数和嵌套的整数数组相加。
定义
限定的深度X为0,如果X是一个整数,如1,如果它是整数(可能是空的)平面阵列,并且作为n + 1个,如果它包含深度的至少一种元素Ñ和无深度的元素K> ñ。
这样,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]]]。
任务
编写一个程序或函数,将两个整数,两个嵌套的整数数组或它们的组合作为输入并返回它们的和,如上所述。
如果您的语言有多种类似数组的类型(列表,元组,向量等),则可以选择其中任何一种作为答案。返回类型必须与参数类型匹配。
为避免无聊和无与伦比的解决方案,如果一种语言具有内置的确切操作功能,则您不能使用该语言。
允许使用所有其他语言的所有内置程序。如果您选择的语言允许这样做,则可以重载和/或重新定义内置附件。
这是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程序。