Tìm kích thước đệ quy của danh sách


20

Lấy cảm hứng từ Tìm các kích thước chưa mở của kích thước của một danh sách .

Xác định Kích thước đệ quy RS, của danh sách không chứa danh sách là độ dài của nó (số lượng mục chứa) và Kích thước đệ quy của danh sách chứa bất kỳ danh sách nào dưới dạng tổng chiều dài của nó và Kích thước đệ quy của các danh sách đó.

Thử thách

Viết chương trình hoặc hàm xuất ra Kích thước đệ quy của bất kỳ danh sách đã cho nào trong càng ít byte càng tốt.

Đầu vào là một danh sách và có thể chứa số, chuỗi (nếu ngôn ngữ của bạn có chúng) và các danh sách tương tự.


Ví dụ:

RS([]) = 0

RS([[]]) = 1

RS([4, 5, 6]) = 3
RS(["four", "five", "six"]) = 3
RS(["[[[[]]]]", "[][][][][]", "][][[[]]][]["]) = 3

RS([[4, 5, 6]]) = 4
RS([["four", "five", "six"]]) = 4
RS([["[[[[]]]]", "[][][][][]", "][][[[]]][]["]]) = 4

RS([[4], [5], [6]]) = 6
RS([["four"], ["five"], ["six"]]) = 6
RS([["[[[[]]]]"], ["[][][][][]"], ["][][[[]]][]["]]) = 6

RS([[[[[[[[[]]]]]]]]]) = 8

RS([[],[],[],[],[],[],[],[]]) = 8

RS([[],[],[[]],[[[[]]]]]) = 8

RS([0,[-1],[2.3,-4.3],[5,[6]],[7,[8,9,[10,11,[12,13,14]]]]]) = 22

Lưu ý rằng nếu ngôn ngữ của bạn không có chuỗi nhưng có danh sách các ký tự, các ví dụ chứa "strings"ở trên thực sự có thể là danh sách các ký tự và có kết quả lớn hơn. Ví dụ:

RS([['f','o','u','r'], ['f','i','v','e'], ['s','i','x']]) = 14

Đây là , vì vậy câu trả lời ngắn nhất tính bằng byte sẽ thắng; không có kinh doanh hài hước, như mọi khi.

Một đầu vào không có trong danh sách có thể tạo ra bất kỳ đầu ra nào.
I / O linh hoạt như bình thường .



Các phần tử sẽ là chuỗi, số và danh sách đệ quy?
xnor

Lưu ý: Hạn chế nội dung của danh sách sau một số cuộc thảo luận. Tôi đã chỉnh sửa câu hỏi để phản ánh điều này. Cảm ơn @xnor cho đầu vào!
Jonathan Allan

2
Tôi cảm thấy như đây sẽ là một thử thách tốt hơn mà không cần phải tính đến các chuỗi. Nó chỉ thêm byte vào một số ngôn ngữ IMO
Conor O'Brien

@ ConorO'Brien hoặc có lẽ tôi nên gửi nó cho người trả lời nếu họ muốn coi một chuỗi như một danh sách hay không. Thật không may, tôi đặc biệt hỏi cộng đồng cả "Có trường hợp cạnh nào tôi nên thêm không?" Và "Có bất kỳ sự làm rõ nào về định nghĩa cần thiết không?" và không có phản hồi trong hộp cát trong hơn chín ngày ... và bây giờ tôi cho rằng một câu hỏi như vậy sẽ là một bản sao?
Jonathan Allan

Câu trả lời:


5

Thạch , 8 byte

߀-ŒḊ?‘S

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

߀-ŒḊ?‘S  Main link. Argument: x

   ŒḊ?    If x has non-zero depth:
߀          Recursively map the main link over its elements.
  -         Else, yield -1.
      ‘   Increment all integers in the result.
       S  Compute the sum of the result.
          If x is an array, incrementing before adding is equivalent to computing
          the sum of the elements and the length.
          If x is an integer/character, incrementing -1 yields 0, as desired.

13

Python, 42 byte

f=lambda x:x*0==[]and len(x)+sum(map(f,x))

Đối với một danh sách không, đầu ra 0. Đối với một danh sách, hãy xuất độ dài của nó cộng với tổng các đầu ra đệ quy cho các phần tử của nó.

Danh sách nằm trên các số và các chuỗi bên dưới theo thứ tự Python 2, yêu cầu []<=x<''. Thay vào đó, chúng tôi kiểm tra x*0==[], trong khi kết quả của 0một số hoặc ''cho một chuỗi.


6

JavaScript (ES6), 39 37 byte

Đã lưu 2 byte nhờ @ edc65

f=a=>a.map&&a.map(x=>a-=~f(x),a=0)&&a

38 byte:f=a=>a.map?a.reduce((s,x)=>s+f(x),0):0
Sethi

@ Sethi Sẽ không trả về 0 cho bất kỳ đầu vào nào? Bạn phải đặt một 1trong đó ở đâu đó.
Sản phẩm ETH

1
37 : f=a=>a.map&&a.map(x=>a-=~f(x),a=0)&&a. -=~là 1 char nhỏ hơn +=1+và, chuyển đổi một boolean thành số nguyên, nó cắt một ký tự khác. Sử dụng lại ađể tránh biến toàn cụct
edc65

@ edc65 Cảm ơn, thật tuyệt!
Sản xuất ETH

5

Toán học, 20 byte

Length@Level[#,∞]&

Chức năng ẩn danh. Lấy một biểu thức là đầu vào và trả về một số là đầu ra. Ký tự Unicode là U + 221E INFINITY cho \[Infinity]. Level[#,∞]đưa ra một danh sách các biểu thức con của đầu vào và Length@đếm chúng.


Bùng nổ! Slam nhúng vào câu trả lời của tôi. Nhưng tôi đã học được một điều mới :)
Greg Martin

5

Toán học, 14 byte

LeafCount@#-1&

Sửa đổi nhỏ của câu trả lời trước của tôi . Như tôi đã giải thích ở đó, LeafCountđã quan tâm đến các giá trị nguyên tử lồng nhau, nhưng nó cũng tính danh sách ngoài cùng, mà chúng ta cần phải trừ đi kết quả.


4

Perl, 34 byte

Một hàm đệ quy! Đúng, Perl không chỉ có regex mà còn có chức năng!

sub f{@_+f(map ref?@$_:(),@_)if@_}

Nếu bạn muốn kiểm tra nó, bạn có thể chạy một cái gì đó như:

perl -pE 'sub f{@_+f(map ref?@$_:(),@_)if@_}$_=f@{+eval}' <<< '[["four"], ["five"], ["six"]]'

3

Toán học, 32 byte

Length@#+Tr[#0/@#~Select~ListQ]&

Hàm đệ quy không tên. Đoạn trích #0/@#~Select~ListQgọi hàm một lần nữa trên mỗi phần tử của đầu vào là danh sách và tính Trtổng các giá trị đó. May mắn thay, Mathematica vẫn ổn khi lấy độ dài của danh sách trống và tìm kiếm các phần tử đủ điều kiện từ danh sách trống, vì vậy không cần trường hợp cơ sở nào.


2

Haskell, 52 byte

data L a=E a|N[L a]
r(N n)=1+sum(r<$>n)
r _=1
pred.r

Ví dụ sử dụng:

*Main> pred.r $ N[E 0,N[E(-1)],N[E 2.3,E(-4.3)],N[E 5,N[E 6]],N[E 7,N[E 8,E 9,N[E 10,E 11,N[E 12,E 13,E 14]]]]] 
22

Haskell không hỗ trợ các danh sách hỗn hợp (ví dụ: Int và danh sách Int), vì vậy tôi đi với một loại danh sách tùy chỉnh Llà một thành phần của một số loại a (-> E a) hoặc danh sách các Ls khác (-> N[L a]). Tính toán RS là một đệ quy đơn giản trong đó một Esố đếm 1và một Ncộng với tổng các kích thước đệ quy của các phần tử của nó. Toàn bộ tổng là 1, vì vậy tôi trừ nó qua pred.

Lưu ý bên lề: các loại và giá trị chính xác của các phần tử không quan trọng đối với thuật toán, vì vậy chúng tôi có thể loại bỏ tính đa hình đối phó với các phần tử trừu tượng và đi cùng data L=E|N[L].


2

Yếu tố, 105 byte

Hàm đệ quy g.

: g ( o -- l ) [ dup [ sequence? ] [ string? not ] bi and [ [ g ] map sum 1 + ] [ drop 1 ] if ] map sum ;

Ungolfed (kinda):

: g ( o -- l ) 
[ dup 
  [ sequence? ] 
  [ string? not ] 
  bi and 
  [ [ g ] map sum 1 + ] 
  [ drop 1 ] 
  if 
] map sum ;

Bạn sẽ thấy không có cuộc gọi nào lengthvì thay vì sử dụng độ dài dựng sẵn, nó được triển khai thông qua các drop 1chuỗi và không theo chuỗi.


2

Toán học, 18 byte

(c=-1;++c&//@#;c)&

Một cách tiếp cận toán học khác. Không ngắn như sử dụng tích hợp LeafCountnhưng vẫn khá súc tích. Điều này sử dụng MapAlltoán tử //@gọi một hàm trên mỗi nút của biểu thức và chúng tôi sử dụng hàm đó để tăng bộ đếm c. Như trong LeafCounttrường hợp, cái này cung cấp nhiều hơn một thứ chúng ta cần, bởi vì nó cũng tính cả đầu danh sách bên ngoài, vì vậy chúng ta bắt đầu bộ đếm từ đó -1.


2

C # (Trình biên dịch tương tác Visual C #) , 50 byte

int f(Array a)=>a.Length+a.OfType<Array>().Sum(f);

Hãy thử trực tuyến!

Sử dụng kỹ thuật tương tự như câu trả lời Java đã gửi trước đó , nhưng tận dụng LINQ để giảm độ dài câu trả lời.

Giải trình:

// f is a method that a accepts
// an array of any underlying type
int f(Array a)=>
  // include the length of the
  // current array in the total
  a.Length+
  // filter the current list to elements
  // that are also arrays
  a.OfType<Array>()
    // recursively call f on each child
    // array and add to cumulative total
    .Sum(f);

2

05AB1E (di sản), 22 17 byte

"ε¼D¸D˜Êi®.V"©.V¾

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

Thử thách này đặt ra nhiều thách thức phải vượt qua trong 05AB1E:

  1. Mặc dù 05AB1E không có chức năng đệ quy kể từ khi Elixir viết lại ( λ), nhưng nó chỉ hữu ích cho các chuỗi số nguyên.Đây là một câu trả lời của tôi như là ví dụ về hàm đệ quy 05AB1E. Do đó, tôi đã phải tìm một giải pháp thay thế để thực hiện các cuộc gọi đệ quy, điều mà tôi đã làm bằng cách đặt một phần mã vào một chuỗi và thực thi chuỗi đó dưới dạng mã 05AB1E theo cách đệ quy.
  2. Cũng không có isList lệnh nào trong 05AB1E, vì vậy tôi đã phải sử dụng một số cách giải quyết để kiểm tra điều này bằng cách sử dụng gói vào một danh sách, làm phẳng sâu và kiểm tra sự bằng nhau.
  3. Và thứ ba, không có sự làm phẳng cho chỉ một cấp của danh sách đa chiều. Hàm flatten ˜là một flatten sâu loại bỏ tất cả các lớp và tạo một danh sách đa chiều thành một danh sách duy nhất với tất cả các giá trị bên trong nhất. (tức là [[1,2],[[[3]],4]]trở thành [1,2,3,4]).

Tôi đã kết thúc với mã ở đầu để khắc phục cả ba vấn đề trên. Nó được chia thành ba phần chính. Đầu tiên chúng ta có những điều sau đây:

"..."        # Create a string with 05AB1E code
     ©       # Save this string in the register (without popping)
      .V     # Execute the string as 05AB1E code

Chuỗi chứa mã sau đây:

ε            # Map each value in the given list by:
             # (this uses the input-list implicitly with the initial call)
 ¼           #  Increase the counter_variable by 1
 D           #  Duplicate the map-value
             #   i.e. STACK "A" becomes "A","A"
             #   i.e. STACK [["B","C"]] becomes [["B","C"]],[["B","C"]]
  ¸          #  Wrap it into a list
             #   i.e. "A" → ["A"]
             #   i.e. [["B","C"]] → [[["B","C"]]]
   D         #  Duplicate that again
             #   i.e. STACK "A",["A"] becomes "A",["A"],["A"]
             #   i.e. STACK [["B","C"]],[[["B","C"]]]
             #    becomes [["B","C"]],[[["B","C"]]],[[["B","C"]]]
    ˜        #  Flatten it
             #   i.e. ["A"] → ["A"]
             #   i.e. [[["B","C"]]] → ["B","C"]
     Ê       #  Check if the wrapped and wrapped+flattened lists are NOT equal
             #   i.e. ["A"] and ["A"] → 0 (falsey)
             #   i.e. [[["B","C"]]] and ["B","C"] → 1 (truthy)
      i      #  If they are:
       ®     #   Push the string from the register
        .V   #   Execute it as 05AB1E code
             #   (this is basically our recursive call, mapping the current value
             #    we duplicated initially again)

Bản đồ được sử dụng thay cho vòng lặp foreach, bởi vì bản đồ có ẩn yvà vòng lặp foreach cần một tường minh y. Chúng tôi chỉ quan tâm đến counter_variable, mặc dù.

Và cuối cùng, sau khi hoàn thành tất cả các bản đồ và bản đồ bên trong, chúng tôi sẽ:

¾           # Push the counter_variable (which is output implicitly as result)


1

C, 174 167 152 byte

Hàm đệ quy f, làm rò rỉ bộ nhớ ( 152 ):

#include"object.h"
size_t f(array_t*a){size_t t=0,i=0;for(;i<array_length(a);i++){object_t*o=array_get_copy(a,i,0);t+=o->type==6?f(o->ary):1;}return t;}

Đệ quy fkhông rò rỉ, sử dụng tài liệu tham khảo, tại 167 :

#include"object.h"
size_t f(array_t*a){size_t t=0,i=0;for(;i<array_length(a);i++){object_t**o=array_get_ref(a,i,0);t+=*o->type==t_array?f(*o->ary):1;}return t;}

Ung dung:

size_t get_recursize (const array_t* const a) {
  pfn();

  object_failnull(a);

  size_t out = 0;

  for (size_t i = 0; i < array_length(a); i++) {

    object_t** o = array_get_ref(a, i, NULL);

    if ( (*o)->type == t_array ) {

      out += get_recursize((*o)->ary);

    } else {
      ++out;
    }
  }
  return out;
}

"Nhưng làm thế nào," bạn hỏi, "điều này có thể được trả lời bằng C không? Chắc chắn, không có mảng nào được quản lý trong C và bạn thực sự không thể có mảng không đồng nhất ...?"

"Aha," tôi trả lời, "vì tôi đã làm việc trên một hệ thống" đối tượng "đơn giản cho (GNU-ish) C11 và ISO C ++ 11".

Chương trình demo đầy đủ cho chức năng này là:

#include "../calc/object/object.h"

size_t get_recursize (const array_t* const a);

define_array_new_fromctype(ssize_t);

int main (void) {

  size_t len = 6;

  static const ssize_t h[6] = { -1, 3, -5, 7, -9, 11 };

  array_t* a = array_new_from_ssize_t_lit(h, len, t_realint);

  size_t rsize = get_recursize(a);

  printf("Recursive size of a: %zu\n", rsize);

  object_t* asobj = object_new(t_array, a);
  array_destruct(a);

  array_t* b = array_new(NULL, -1);

  for (size_t j = 0; j < 10; j++) {
    array_append(b, asobj);
  }

  object_destruct(asobj);

  rsize = get_recursize(b);

  printf("Recursive size of b: %zu\n", rsize);

  asobj = object_new(t_array, b);
  array_destruct(b);

  array_t* c = array_new(NULL, -1);

  for (size_t i = 0; i < 100; i++) {
    array_append(c, asobj);
  }

  object_destruct(asobj);

  rsize = get_recursize(c);

  printf("Recursive size of c: %zu\n", rsize);

  array_destruct(c);

  return EXIT_SUCCESS;
}

size_t get_recursize (const array_t* const a) {
  pfn();

  object_failnull(a);

  size_t out = 0;

  for (size_t i = 0; i < array_length(a); i++) {

    object_t** o = array_get_ref(a, i, NULL);

    if ( (*o)->type == t_array ) {

      out += get_recursize((*o)->ary);

    } else {
      ++out;
    }
  }
  return out;
}

Ngay bây giờ, nó sống ở đây và bạn sẽ cần repo đó để sử dụng cái này.

Bạn cũng sẽ cần thư viện băm Fowler-Noll-Vo libfnv, được biên dịch cho nền tảng của bạn. Nó nằm trong kho lưu trữ đó và bạn cũng có thể lấy nó ở đây .

Sau đó, bạn có thể làm cc -DNODEBUG size.c path/to/libfnv.a -o size.

Việc thực hiện không nhất thiết phải hiệu quả:

$ valgrind --leak-check=full --track-origins=yes --show-leak-kinds=all ./size
==24127== Memcheck, a memory error detector
==24127== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==24127== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==24127== Command: ./size
==24127== 
Recursive size of a: 6
Recursive size of b: 60
Recursive size of c: 6000
==24127== 
==24127== HEAP SUMMARY:
==24127==     in use at exit: 0 bytes in 0 blocks
==24127==   total heap usage: 22,900 allocs, 22,900 frees, 615,584 bytes allocated
==24127== 
==24127== All heap blocks were freed -- no leaks are possible
==24127== 
==24127== For counts of detected and suppressed errors, rerun with: -v
==24127== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Nhưng nó làm việc! Cam kết cuối cùng để làm chủ (mà chương trình này đã biên soạn) là 2 ngày trước, điều đó có nghĩa là bài nộp này hợp lệ.


1

Tiên đề 118 byte

RS(a:Union(List(Any),Any)):INT==(a case List(Any)=>(g:List(Any):=a;leaf? g=>0;r:=#g;for i in g repeat r:=r+RS(i);r);0)

vô dụng

RS(a:Union(List(Any),Any)):INT==
  a case List(Any)=>
          g:List(Any):=a
          leaf? g=>0
          r:=#g
          for i in g repeat r:=r+RS(i)
          r
  0

các kết quả

(25) -> RS([])=0
   (25)  0= 0
                                        Type: Equation NonNegativeInteger
(26) -> RS([[]]) = 1
   (26)  1= 1
                                           Type: Equation PositiveInteger
(27) -> RS([4, 5, 6]) = 3
   (27)  3= 3
                                           Type: Equation PositiveInteger
(28) -> RS(["four", "five", "six"]) = 3
   (28)  3= 3
                                           Type: Equation PositiveInteger
(29) -> RS(["[[[[]]]]", "[][][][][]", "][][[[]]][]["]) = 3
   (29)  3= 3
                                           Type: Equation PositiveInteger
(30) -> RS([[4, 5, 6]]) = 4
   (30)  4= 4
                                           Type: Equation PositiveInteger
(31) -> RS([["four", "five", "six"]]) = 4
   (31)  4= 4
                                           Type: Equation PositiveInteger
(32) -> RS([["[[[[]]]]", "[][][][][]", "][][[[]]][]["]]) = 4
   (32)  4= 4
                                           Type: Equation PositiveInteger
(33) -> RS([[4], [5], [6]]) = 6
   (33)  6= 6
                                           Type: Equation PositiveInteger
(34) -> RS([["four"], ["five"], ["six"]]) = 6
   (34)  6= 6
                                           Type: Equation PositiveInteger
(35) -> RS([["[[[[]]]]"], ["[][][][][]"], ["][][[[]]][]["]]) = 6
   (35)  6= 6
                                           Type: Equation PositiveInteger
(36) -> RS([[[[[[[[[]]]]]]]]]) = 8
   (36)  8= 8
                                           Type: Equation PositiveInteger
(37) -> RS([[],[],[],[],[],[],[],[]]) = 8
   (37)  8= 8
                                           Type: Equation PositiveInteger
(38) -> RS([[],[],[[]],[[[[]]]]]) = 8
   (38)  8= 8
                                           Type: Equation PositiveInteger
(39) -> RS([0,[-1],[2.3,-4.3],[5,[6]],[7,[8,9,[10,11,[12,13,14]]]]]) = 22
   (39)  22= 22
                                           Type: Equation PositiveInteger
(40) -> RS([['f','o','u','r'], ['f','i','v','e'], ['s','i','x']]) = 14
   (40)  14= 14
                                           Type: Equation PositiveInteger

1

APL (NARS), 24 ký tự, 48 byte

{⍬≡⍵:0⋄×≡⍵:(≢⍵)++/∇¨⍵⋄0}

Đây sẽ là sự tráo trở của câu trả lời 'của tôi' ở đây ... Trong APL, danh sách khoảng trống sẽ là ⍬ ⍬ Zilde, mà bạn chỉ ra với ọ [] 1 2 3 hung là ôn [1,2,3] ắc ecc Một số thử nghiệm:

  RS←{⍬≡⍵:0⋄×≡⍵:(≢⍵)++/∇¨⍵⋄0}
  RS ⍬
0
  RS ⊂⍬
1
  RS  4 5 6
3
  RS ("four")("five")("six")
14
  RS ('f' 'o' 'u' 'r') ('f' 'i' 'v' 'e') ('s' 'i' 'x')
14
  RS ("(((())))")("()()()()()")(")()((()))()(")
33
  RS (⊂4 5 6)
4
  RS (⊂("four")("five")("six")) 
15
  RS (⊂("(((())))")("()()()()()")(")()((()))()(") )
34
  RS (,4) (,5) (,6)
6
  RS ⊂¨("four")("five")("six")
17
  RS ⊂¨("(((())))")("()()()()()")(")()((()))()(") 
36
  RS ⊂⊂⊂⊂⊂⊂⊂⊂⍬
8
  RS ⍬⍬⍬⍬⍬⍬⍬⍬
8
  RS ⍬⍬(⊂⍬)(⊂(⊂(⊂⍬)))
8
  RS 0(,¯1)(2.3 ¯4.3)(5 (,6))(7 (8 9 (10 11 (12 13 14))))  
22     

để in loại kết quả khác mà bài tập đề xuất, chúng tôi cần một chức năng khác (cả hai chức năng RS và R sẽ ổn cho bài tập)

  Rs←{⍬≡⍵:0⋄(''≡0↑⍵)∨0=≡⍵:0⋄(≢⍵)++/∇¨⍵}
  Rs ("four")("five")("six")
3
  Rs ("(((())))")("()()()()()")(")()((()))()(")
3
  Rs (⊂("four")("five")("six"))
4
  Rs (⊂("(((())))")("()()()()()")(")()((()))()(") )
4
  Rs ⊂¨("four")("five")("six")
6
  Rs ⊂¨("(((())))")("()()()()()")(")()((()))()(")
6
  Rs 0(,¯1)(2.3 ¯4.3)(5 (,6))(7 (8 9 (10 11 (12 13 14))))
22
  Rs ('f' 'o' 'u' 'r') ('f' 'i' 'v' 'e') ('s' 'i' 'x')
3

để xem làm thế nào xuất hiện một số đầu vào, chúng tôi sử dụng chức năng o:

  o←⎕fmt
  o 0(,¯1)(2.3 ¯4.3)(5 (,6))(7 (8 9 (10 11 (12 13 14))))
┌5─────────────────────────────────────────────────────────┐
│  ┌1──┐ ┌2────────┐ ┌2─────┐ ┌2──────────────────────────┐│
│0 │ ¯1│ │ 2.3 ¯4.3│ │  ┌1─┐│ │  ┌3──────────────────────┐││
│~ └~──┘ └~────────┘ │5 │ 6││ │7 │    ┌3────────────────┐│││
│                    │~ └~─┘2 │~ │8 9 │      ┌3────────┐││││
│                    └∊─────┘ │  │~ ~ │10 11 │ 12 13 14│││││
│                             │  │    │~~ ~~ └~────────┘2│││
│                             │  │    └∊────────────────┘3││
│                             │  └∊──────────────────────┘4│
│                             └∊──────────────────────────┘5
└∊─────────────────────────────────────────────────────────┘

bản in này Zilde và một danh sách 8 Zilde:

  o ⍬
┌0─┐
│ 0│
└~─┘
  o ⍬⍬⍬⍬⍬⍬⍬⍬
┌8──────────────────────────────────────┐
│┌0─┐ ┌0─┐ ┌0─┐ ┌0─┐ ┌0─┐ ┌0─┐ ┌0─┐ ┌0─┐│
││ 0│ │ 0│ │ 0│ │ 0│ │ 0│ │ 0│ │ 0│ │ 0││
│└~─┘ └~─┘ └~─┘ └~─┘ └~─┘ └~─┘ └~─┘ └~─┘2
└∊──────────────────────────────────────┘

1

Java, 96 byte

int c(Object[]a){int r=a.length;for(var i:a)r+=i instanceof Object[]?c((Object[])i):0;return r;}

Hãy thử trực tuyến.

Giải trình:

int c(Object[]a){  // Recursive method with Object-array parameter and integer return-type
  int r=a.length;  //  Result-sum, starting at the size of the input-array
  for(var i:a)     //  Loop over the input-array:
    r+=            //   Increase the result-sum by:
       i instanceof Object[]?
                   //    If the current item is an array:
        c((Object[])i) 
                   //     A recursive call with this item
       :           //    Else:
        0;         //     0 (so leave the result-sum the same)
  return r;}       //  Return the result-sum


1

Clojure, 79 77 51 byte

Đầu vào phải là một danh sách, không phải vector. Cả hai sẽ được hỗ trợ bằng cách sử dụng sequential?.

(defn f[i](if(seq? i)(apply +(count i)(map f i))0))

Trước:

(defn f[i](if(seq? i)(if(some seq? i)(apply +(count i)(map f i))(count i))0))

-1

Python, 72 byte

l=lambda a:0if len(a)==0else len(a)+sum(l(i)for i in a if type(i)==list)

bạn có thể xóa một số khoảng trắng ở đó
Blue

Cụ thể, giữa 0if, 0else, )for.
Zacharý

2
Nếu bạn cần đại diện cho tài khoản bot trò chuyện của mình, hãy xem xét việc đóng góp có ý nghĩa cho trang web. Điều này bổ sung hoàn toàn không có gì qua câu trả lời Python 42 byte hiện có.
Dennis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.