Arka fon
Jelly'in aritmetik atomları otomatik olarak vektörleşir. Aslında, burada x + y , iyi tanımlanmış zaman olan X ve Y sayıların ya da sayıların düzensiz dizilerdir. Jelly'in kaynak kodu bu davranışı genel bir vectorizer kullanarak uygular, ancak bu meydan okuma için yalnızca tamsayıların ve iç içe tamsayı dizilerinin eklenmesini ele alacağız.
Tanımlar
Derinliğini tanımlar x olarak 0 ise X gibi bir tam sayı olduğu 1 bu bir tamsayı (muhtemelen boş) düz dizi ve sanki n + 1 , en azından bir derinlik elemanı içeriyorsa , n ve derinlik herhangi bir öğe k> n .
Bu şekilde, 1 derinliği 0 , [] ve [1] ve [1, 1] derinliği 1 , [[], []] ve [[1], [1]] ve [[1]] ve [1 , []] derinliğe 2 , [1, [1, [1]]] derinliğe 3 vb. sahiptir .
X + y işlemi aşağıdaki gibi tanımlanır.
Eğer x ve y derinliğe sahip 0 , bunların toplamı döndürür.
Eğer x ve y eşit ama olumlu derinlikleri var, yinelemeli uygulamak + tüm öğelere x ve karşılık gelen öğeler y .
Eğer x ve y farklı uzunluklara sahip, toplamlar dizisine uzun dizinin kuyruk ekleyin.
Sonucu döndür.
Eğer x 'in derinlik daha sıkı küçüktür y kullanıcısının derinliği, yinelemeli uygulamak + için x ve tüm kalemlerin y , ve sonucu döndürür.
Eğer tersini yapın y 'nin derinliği daha sıkı küçüktür x s'.
Örneğin, [1, [2, 3], [4]] + [[[10, 20], [30], 40, 50], 60] işlemlerini düşünün .
Sol değişken derinliği 2 doğru değişken derinliği ise, 3 biz hesaplamak, yani [[2, 3], [4] 1] + [[10, 20], [30], 40, 50 ] ve [1, [2, 3], [4]] + 60 .
[1, [2, 3], [4]] ve [[10, 20], [30], 40, 50] derinlik 2'ye sahip , bu nedenle 1 + [10, 20] , [2, 3] hesaplıyoruz + [30] ve [4] + 40 .
1 + [10, 20] = [1 + 10, 1 + 20] = [11, 21]
[2, 3] + [30] = [2 + 30, 3] = [32, 3]
Eşleşen bir elemanı olmadığı için 3'ün dokunulmadan kaldığını unutmayın .
[4] + 40 = [4 + 40] = [44]
50 sonucudur, yani bir uygun elemanına sahip değildir [[[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]] ile sonuçlanan [61, [62, 63], [64]] .
Nihai sonuç [[[11, 21], [32, 3], [44], 50], [61, [62, 63], [64]]] .
Görev
Giriş olarak iki tamsayı, iki iç içe tamsayı dizisi veya bunların bir kombinasyonunu alan ve yukarıda tanımlandığı gibi toplamlarını döndüren bir program veya işlev yazın.
Dilinizde birden çok dizi benzeri tür (liste, tuples, vektör, vb.) Varsa, yanıtınız için bunlardan herhangi birini seçebilirsiniz. Dönüş türü, bağımsız değişken türüyle eşleşmelidir.
Bir dilin bu kadar kesin olması durumunda, sıkıcı ve rakipsiz çözümleri önlemek için yerleşik olarak olarak işlem varsa, o dili kullanamayabilirsiniz.
Diğer tüm dillerin yerleşiklerine izin verilir. Tercih ettiğiniz dil buna izin veriyorsa, dahili eklentiyi aşırı yükleyebilir ve / veya yeniden tanımlayabilirsiniz.
Bu kod golfüdür , bu nedenle bayttaki en kısa kod kazanır.
Test senaryoları
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]]]]
Daha fazla test örneği oluşturmak için bu Jelly programını kullanabilirsiniz .