Trova la "Dimensione ricorsiva" di un elenco


20

Ispirato da Trova la "dimensione da scartare" di un elenco .

Definire la dimensione ricorsiva, RS di un elenco che non contiene elenchi come lunghezza (numero di elementi contenuti) e la dimensione ricorsiva di un elenco che contiene elenchi come la somma della sua lunghezza e la dimensione ricorsiva di tali elenchi.

Sfida

Scrivi un programma o una funzione che genera la dimensione ricorsiva di un determinato elenco nel minor numero di byte possibile.

L'input è un elenco e può contenere numeri, stringhe (se presenti nella tua lingua) ed elenchi simili.


Per esempio:

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

Nota che se la tua lingua non ha stringhe ma ha elenchi di caratteri, gli esempi che contengono "strings"sopra potrebbero effettivamente essere elenchi di caratteri e avere risultati più grandi. Come esempio:

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

Questo è , quindi vince la risposta più breve in byte; niente affari divertenti, come sempre.

Un input non di elenco può produrre qualsiasi output.
L'I / O è flessibile come al solito .



Gli elementi saranno stringhe, numeri ed elenchi ricorsivi?
xnor

Nota: limitato il contenuto degli elenchi dopo alcune discussioni. Ho modificato la domanda per riflettere questo. Grazie a @xnor per l'input!
Jonathan Allan,

2
Sento che questa sarebbe una sfida migliore senza dover tenere conto delle stringhe. Aggiunge solo byte ad alcune lingue IMO
Conor O'Brien,

@ ConorO'Brien o forse avrei dovuto rimediare al risponditore se avessero voluto trattare una stringa come una lista o no. Purtroppo ho espressamente chiesto alla community sia "Ci sono casi limite che dovrei aggiungere?", Sia "È necessario chiarire la definizione?" e non ho ricevuto risposta nella sandbox per nove giorni ... e ora suppongo che una domanda del genere sarebbe un duplicato?
Jonathan Allan,

Risposte:


5

Gelatina , 8 byte

߀-ŒḊ?‘S

Provalo online!

Come funziona

߀-ŒḊ?‘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))

Per un non elenco, output 0. Per un elenco, output la sua lunghezza più la somma degli output ricorsivi per i suoi elementi.

Le liste cadono sopra i numeri e sotto le stringhe nell'ordinamento di Python 2, richiedendo []<=x<''. Invece, controlliamo x*0==[], mentre il risultato di 0per un numero o ''per una stringa.


6

JavaScript (ES6), 39 37 byte

Salvato 2 byte grazie a @ 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 Non restituirebbe 0 per qualsiasi input? Devi metterti 1dentro da qualche parte.
ETHproductions

1
37: f=a=>a.map&&a.map(x=>a-=~f(x),a=0)&&a. -=~è 1 carattere in meno di +=1+e, convertendo un valore booleano in intero, taglia un altro carattere. Riutilizzo aper evitare la variabile globalet
edc65,

@ edc65 Grazie, fantastico!
ETHproductions

5

Mathematica, 20 byte

Length@Level[#,∞]&

Funzione anonima. Prende un'espressione come input e restituisce un numero come output. Il carattere Unicode è U + 221E INFINITY per \[Infinity]. Level[#,∞]fornisce un elenco delle sottoespressioni dell'input e le Length@conta.


Boom! Sbattuto sulla mia risposta. Ma ho imparato qualcosa di nuovo :)
Greg Martin,

5

Mathematica, 14 byte

LeafCount@#-1&

Modifiche minori della mia risposta precedente . Come ho spiegato lì, LeafCountsi occupa già dei valori atomici nidificati, ma conta anche l'elenco più esterno, che dobbiamo sottrarre dal risultato.


4

Perl, 34 byte

Una funzione ricorsiva! Sì, Perl non ha solo regex ma ha anche funzioni!

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

Se vuoi provarlo, puoi eseguire qualcosa del tipo:

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

3

Mathematica, 32 byte

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

Funzione ricorsiva senza nome. L'estratto #0/@#~Select~ListQchiama di nuovo la funzione su ogni elemento dell'input che è un elenco e Trsomma questi valori. Fortunatamente Mathematica sta bene prendendo la lunghezza della lista vuota e cercando elementi qualificanti dalla lista vuota, quindi non è necessario alcun caso base.


2

Haskell, 52 byte

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

Esempio di utilizzo:

*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 non supporta liste miste (es. Int e lista di Int), quindi vado con un tipo di elenco personalizzato Lche è un elemento di qualche tipo a (-> E a) o un elenco di altri L (-> N[L a]). Il calcolo della RS è una semplice ricorsione in cui un Econta 1e Nuno più la somma delle dimensioni ricorsive dei suoi elementi. L'intera somma è disattivata di 1, quindi la sottraggo via pred.

Nota a margine: i tipi e i valori esatti degli elementi non sono importanti per l'algoritmo, quindi potremmo rimuovere il polimorfismo trattando solo di elementi astratti e andare avanti data L=E|N[L].


2

Fattore, 105 byte

Funzione ricorsiva 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 ;

Scoprirai che non ci sono chiamate lengthperché invece di usare la lunghezza incorporata, è implementata attraverso drop 1stringhe e non sequenze.


2

Mathematica, 18 byte

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

Ancora un altro approccio Mathematica. Non è breve come usare il built-in LeafCountma comunque abbastanza conciso. Questo fa uso MapAlldell'operatore //@che chiama una funzione su ogni nodo di un'espressione e usiamo quella funzione per incrementare un contatore c. Come nel LeafCountcaso, questo dà uno in più di quanto abbiamo bisogno, perché conta anche la testa della lista esterna, quindi iniziamo il contatore -1.


2

C # (compilatore interattivo Visual C #) , 50 byte

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

Provalo online!

Utilizza la stessa tecnica della risposta Java precedentemente inviata , ma utilizza LINQ per ridurre la lunghezza della risposta.

Spiegazione:

// 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 (legacy), 22 17 byte

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

Provalo online o verifica tutti i casi di test .

Spiegazione:

Questa sfida pone molteplici sfide da superare in 05AB1E:

  1. Sebbene 05AB1E abbia una funzione ricorsiva dopo la riscrittura dell'Elisir ( λ), è utile solo per le sequenze di numeri interi. Ecco una mia risposta come esempio della funzione ricorsiva 05AB1E. Per questo motivo, ho dovuto trovare un'alternativa per effettuare chiamate ricorsive, cosa che ho fatto inserendo parte del codice in una stringa ed eseguire quella stringa come codice 05AB1E in modo ricorsivo.
  2. Inoltre non esiste un isListcomando in 05AB1E, quindi ho dovuto usare alcune soluzioni alternative per verificarlo utilizzando il wrapping in un elenco, l'appiattimento profondo e la verifica dell'uguaglianza.
  3. E in terzo luogo, non esiste un appiattimento per un solo livello di un elenco multidimensionale. La funzione appiattisci ˜è un'appiattimento profondo che rimuove tutti i livelli e trasforma un elenco multidimensionale in un unico elenco con tutti i valori più interni. (cioè [[1,2],[[[3]],4]]diventa [1,2,3,4]).

Ho finito con il codice in alto per superare tutti e tre i problemi di cui sopra. È diviso in tre parti principali. Innanzitutto abbiamo il seguente:

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

La stringa contiene il seguente codice:

ε            # 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)

Viene utilizzata una mappa anziché un ciclo foreach, poiché la mappa ha un implicito ye un ciclo foreach richiede un esplicito y. Ci preoccupiamo solo del counter_variable, però.

E infine, dopo aver completato tutte le mappe e le mappe interne, faremo:

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

2

R , 65 byte

R=function(L,`*`=sapply)"if"(any(L*is.list),sum(1+L*R),length(L))

Provalo online!

Ovvia implementazione ricorsiva della specifica.


1

C, 174 167 152 byte

Funzione ricorsiva f, che perde memoria ( 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;}

Ricorsivo fche non perde, usando i riferimenti, a 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;}

Ungolfed:

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;
}

"Ma come," chiedi, "si può rispondere in C? Sicuramente, non ci sono matrici gestite in C, e non si possono realmente avere matrici eterogenee ...?"

"Ah," rispondo, "perché ho lavorato su un semplice sistema di" oggetti "per (GNU-ish) C11 e ISO C ++ 11".

Il programma demo completo per questa funzione è:

#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;
}

In questo momento, vive qui e avrai bisogno di quel repository per usarlo.

Avrai anche bisogno della libreria di hash Fowler-Noll-Vo libfnv, compilata per la tua piattaforma. È in quel repository e puoi anche prenderlo qui .

Quindi puoi farlo cc -DNODEBUG size.c path/to/libfnv.a -o size.

L'implementazione non è necessariamente efficiente:

$ 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)

Ma funziona! L'ultimo commit a master (su cui questo programma è stato compilato) è stato 2 giorni fa, il che significa che questo invio è valido.


1

Axiom 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)

ungolfed

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

risultati

(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 caratteri, 48 byte

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

Questa sarebbe la traduzione letterale della 'mia' risposta Axiom qui ... In APL l'elenco vuoto sarebbe ´⍬´ Zilde, che indichi con ´ [] ´, ´⊂⍬´ è ´ [[]] ´, ´ 1 2 3´ è ´ [1,2,3] ´ ecc Alcuni test:

  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     

per stampare l'altro tipo di risultati dell'esercizio proposto abbiamo bisogno di un'altra funzione (entrambe le funzioni RS e R dovrebbero essere ok per l'esercizio)

  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

per vedere come appaiono alcuni input usiamo la funzione 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
└∊─────────────────────────────────────────────────────────┘

questa stampa di Zilde e un elenco di 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;}

Provalo online.

Spiegazione:

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

Attache , 21 byte

{#_+Sum!$=>IsArray\_}

Provalo online!

Risulta l' approccio C # è piuttosto breve in Attache.

alternative

25 byte f[x]:=#x+Sum!f=>IsArray\x

26 byte f[x]:=#x+Sum[f=>IsArray\x]

35 byte f:=Sum##{If[IsArray@_,1+f@_,1]}=>Id

35 byte f:=Sum@Map[{If[IsArray@_,1+f@_,1]}]

37 byte f[x]:=Sum[{If[IsArray@_,1+f@_,1]}=>x]


1

Clojure, 79 77 51 byte

L'input deve essere un elenco, non un vettore. Entrambi sarebbero supportati utilizzando sequential?.

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

Precedente:

(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)

puoi rimuovere alcuni spazi lì
Blue

In particolare, tra 0e if, 0e else, e )e for.
Zacharý,

2
Se hai bisogno di un rappresentante per l'account del tuo bot di chat, considera di dare un contributo significativo al sito. Ciò non aggiunge assolutamente nulla alla preesistente risposta Python a 42 byte.
Dennis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.