Trouver la «taille récursive» d'une liste


20

Inspiré par Trouvez la «taille déballée» d'une liste .

Définissez la taille récursive RS, d'une liste ne contenant aucune liste comme sa longueur (nombre d'éléments contenus) et la taille récursive d'une liste contenant des listes comme la somme de sa longueur et la taille récursive de ces listes.

Défi

Écrivez un programme ou une fonction qui génère la taille récursive d'une liste donnée dans le moins d'octets possible.

L'entrée est une liste et peut contenir des nombres, des chaînes (si votre langue en possède) et des listes similaires.


Par exemple:

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

Notez que si votre langue n'a pas de chaînes mais a des listes de caractères, les exemples contenant "strings"ci-dessus pourraient en fait être des listes de caractères et avoir des résultats plus importants. Par exemple:

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

Il s'agit de , donc la réponse la plus courte en octets l'emporte; pas de drôles d'affaires, comme toujours.

Une entrée non listée peut produire n'importe quelle sortie.
Les E / S sont aussi flexibles que d'habitude .



Les éléments seront-ils des chaînes, des nombres et des listes récursives?
xnor

Remarque: restreint le contenu des listes après une discussion. J'ai modifié la question pour refléter cela. Merci à @xnor pour sa contribution!
Jonathan Allan

2
Je pense que ce serait un meilleur défi sans avoir à tenir compte des chaînes. Il ajoute seulement des octets à certaines langues IMO
Conor O'Brien

@ ConorO'Brien ou peut-être aurais-je dû rattraper le répondeur s'il souhaitait traiter une chaîne comme une liste ou non. Malheureusement, j'ai spécifiquement demandé à la communauté "Y a-t-il des cas marginaux que je devrais ajouter?" Et "Une clarification de la définition est-elle nécessaire?" et je n'ai reçu aucune réponse dans le bac à sable pendant neuf jours ... et maintenant je suppose qu'une telle question serait en double?
Jonathan Allan

Réponses:


5

Gelée , 8 octets

߀-ŒḊ?‘S

Essayez-le en ligne!

Comment ça fonctionne

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

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

Pour une non-liste, sortez 0. Pour une liste, sortez sa longueur plus la somme des sorties récursives pour ses éléments.

Les listes tombent au-dessus des nombres et au-dessous des chaînes dans l'ordre Python 2, ce qui nécessite []<=x<''. Au lieu de cela, nous vérifions x*0==[], tandis que le résultat de 0pour un nombre ou ''pour une chaîne.


6

JavaScript (ES6), 39 37 octets

Enregistré 2 octets grâce à @ edc65

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

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

@Sethi Cela ne retournerait-il pas 0 pour une entrée? Vous devez en mettre un 1quelque part.
ETHproductions

1
37: f=a=>a.map&&a.map(x=>a-=~f(x),a=0)&&a. -=~est inférieur de 1 caractère +=1+et, convertissant un booléen en entier, il coupe un autre caractère. Réutilisation apour éviter la variable globalet
edc65

@ edc65 Merci, c'est super!
ETHproductions

5

Mathematica, 20 octets

Length@Level[#,∞]&

Fonction anonyme. Prend une expression en entrée et renvoie un nombre en sortie. Le caractère Unicode est U + 221E INFINITY pour \[Infinity]. Level[#,∞]donne une liste des sous-expressions de l'entrée et les Length@compte.


Boom! Slam a trempé ma réponse. Mais j'ai appris quelque chose de nouveau :)
Greg Martin

5

Mathematica, 14 octets

LeafCount@#-1&

Modification mineure de ma réponse précédente . Comme je l'ai expliqué ici, LeafCountprend déjà en charge les valeurs atomiques imbriquées, mais il compte également la liste la plus externe, que nous devons soustraire du résultat.


4

Perl, 34 octets

Une fonction récursive! Oui, Perl a non seulement des expressions régulières, mais aussi des fonctions!

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

Si vous voulez le tester, vous pouvez exécuter quelque chose comme:

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

3

Mathematica, 32 octets

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

Fonction récursive sans nom. L'extrait #0/@#~Select~ListQappelle à nouveau la fonction sur chaque élément de l'entrée qui est une liste et Trrésume ces valeurs. Heureusement, Mathematica prend bien la longueur de la liste vide et recherche les éléments de qualification à partir de la liste vide, donc aucun cas de base n'est nécessaire.


2

Haskell, 52 octets

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

Exemple d'utilisation:

*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 ne prend pas en charge les listes mixtes (par exemple, Int et la liste d'Int), donc je choisis un type de liste personnalisé Lqui est soit un élément d'un certain type a (-> E a) ou une liste d'autres L (-> N[L a]). Le calcul du RS est une récursivité simple où un Ecompte 1et un Nplus la somme des tailles récursives de ses éléments. La somme totale est réduite de 1, donc je la soustrait via pred.

Remarque: les types et valeurs exacts des éléments ne sont pas importants pour l'algorithme, nous pourrions donc supprimer le polymorphisme et traiter uniquement les éléments abstraits et continuer data L=E|N[L].


2

Facteur, 105 octets

Fonction récursive g.

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

Non golfé (un peu):

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

Vous constaterez qu'il n'y a aucun appel à, lengthcar au lieu d'utiliser la longueur intégrée, il est implémenté via des drop 1chaînes et des non-séquences.


2

Mathematica, 18 octets

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

Encore une autre approche Mathematica. Pas aussi court que d'utiliser le intégré, LeafCountmais toujours assez concis. Cela utilise l' MapAllopérateur //@qui appelle une fonction sur chaque nœud d'une expression, et nous utilisons cette fonction pour incrémenter un compteur c. Comme dans le LeafCountcas, cela en donne un de plus que ce dont nous avons besoin, car il compte également l'en-tête de liste externe, nous commençons donc le compteur -1.


2

C # (Visual C # Interactive Compiler) , 50 octets

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

Essayez-le en ligne!

Utilise la même technique que la réponse Java précédemment soumise , mais LINQ pour réduire la longueur de la réponse.

Explication:

// 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 (hérité), 22 17 octets

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

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

Ce défi pose plusieurs défis à surmonter dans 05AB1E:

  1. Bien que 05AB1E ait une fonction récursive depuis la réécriture Elixir ( λ), elle n'est utile que pour les séquences entières. Voici une de mes réponses comme exemple de la fonction récursive 05AB1E. À cause de cela, j'ai dû trouver une alternative pour faire des appels récursifs, ce que j'ai fait en mettant une partie du code dans une chaîne et en exécutant cette chaîne en tant que code 05AB1E de manière récursive.
  2. Il n'y a pas non plus de isListcommande dans 05AB1E, j'ai donc dû utiliser des solutions de contournement pour vérifier cela en utilisant l'habillage dans une liste, l'aplatissement en profondeur et la vérification de l'égalité.
  3. Et troisièmement, il n'y a pas d'aplatissement pour un seul niveau d'une liste multidimensionnelle. La fonction d'aplatissement ˜est un aplatissement profond qui supprime toutes les couches et fait d'une liste multidimensionnelle une liste unique avec toutes les valeurs les plus internes. (c'est-à-dire [[1,2],[[[3]],4]]devient [1,2,3,4]).

Je me suis retrouvé avec le code en haut pour surmonter les trois problèmes ci-dessus. Il est divisé en trois parties principales. Nous avons d'abord les éléments suivants:

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

La chaîne contient le code suivant:

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

Une carte est utilisée à la place d'une boucle foreach, car la carte a un implicite y, et une boucle foreach a besoin d'un explicite y. counter_variableMais nous ne nous soucions que de la .

Et enfin, une fois toutes les cartes et cartes internes terminées, nous allons:

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


1

C, 174 167 152 octets

Fonction récursive f, qui fuit la mémoire ( 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;}

Récursif fqui ne fuit pas, en utilisant des références, à 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;}

Non golfé:

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

"Mais comment," demandez-vous, "cela peut-il être répondu en C? Sûrement, il n'y a pas de tableaux gérés en C, et vous ne pouvez pas vraiment avoir de tableaux hétérogènes ...?"

"Aha," je réponds, "car j'ai travaillé sur un système simple d '" objets "pour (GNU-ish) C11 et ISO C ++ 11".

Le programme de démonstration complet pour cette fonction est:

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

En ce moment, il vit ici et vous aurez besoin de ce dépôt pour l'utiliser.

Vous aurez également besoin de la bibliothèque de hachage Fowler-Noll-Vo libfnv, compilée pour votre plate-forme. Il est dans ce référentiel et vous pouvez également le récupérer ici .

Ensuite, vous pouvez faire cc -DNODEBUG size.c path/to/libfnv.a -o size .

L'implémentation n'est pas forcément efficace:

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

Mais, il fonctionne! Le dernier commit à master (sur lequel ce programme a compilé) était il y a 2 jours, ce qui signifie que cette soumission est valide.


1

Axiome 118 octets

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)

non golfé

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

résultats

(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 caractères, 48 ​​octets

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

Ce serait la traduction littérale de «ma» réponse Axiom ici ... 1 2 3´ est ´ [1,2,3] ´ ecc Quelques tests:

  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     

pour imprimer l'autre type de résultats, l'exercice propose que nous ayons besoin d'une autre fonction (les fonctions RS et R devraient être correctes pour l'exercice)

  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

pour voir comment apparaissent certaines entrées, nous utilisons la fonction 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
└∊─────────────────────────────────────────────────────────┘

cette impression Zilde, et une liste de 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 octets

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

Essayez-le en ligne.

Explication:

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

Attaché , 21 octets

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

Essayez-le en ligne!

Il s'avère que l' approche C # est assez courte dans Attache.

Alternatives

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

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

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

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

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


1

Clojure, 79 77 51 octets

L'entrée doit être une liste, pas un vecteur. Les deux seraient pris en charge en utilisant sequential?.

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

Précédent:

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

-1

Python, 72 octets

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

vous pouvez y supprimer des espaces
Blue

Plus précisément, entre 0et if, 0et else, et )et for.
Zacharý

2
Si vous avez besoin d'un représentant pour votre compte de chat bot, pensez à apporter une contribution significative au site. Cela n'ajoute absolument rien à la réponse Python préexistante de 42 octets.
Dennis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.