एक सूची के "पुनरावर्ती आकार" का पता लगाएं


20

किसी सूची के "अनकैप्ड आकार" का पता लगाने के लिए प्रेरित ।

RSकिसी सूची में अपनी लंबाई (समाहित वस्तुओं की संख्या) और किसी सूची की पुनरावर्ती आकार जिसकी लंबाई और उन सूचियों के पुनरावर्ती आकार के रूप में कोई सूची नहीं है, की पुनरावर्ती आकार को परिभाषित करें ।

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें जो किसी भी सूची के पुनरावर्ती आकार को यथासंभव कुछ बाइट्स में आउटपुट करता है।

इनपुट एक सूची है और इसमें संख्याएँ, तार (यदि आपकी भाषा उनके पास है), और समान सूची हो सकती है।


उदाहरण के लिए:

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

ध्यान दें कि यदि आपकी भाषा में कोई तार नहीं है लेकिन पात्रों की सूची है, तो "strings"ऊपर दिए गए उदाहरण वास्तव में पात्रों की सूची हो सकते हैं और बड़े परिणाम हो सकते हैं। उदाहरण के तौर पे:

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

यह , इसलिए बाइट्स में सबसे कम जवाब जीतता है; कोई मजाकिया व्यवसाय नहीं, हमेशा की तरह।

एक गैर-सूची इनपुट किसी भी आउटपुट का उत्पादन कर सकता है।
I / O हमेशा की तरह लचीला है



क्या तत्व तार, संख्या और पुनरावर्ती सूची होंगे?
xnor

नोट: कुछ चर्चा के बाद सूचियों की सामग्री प्रतिबंधित। मैंने इसे प्रतिबिंबित करने के लिए प्रश्न संपादित किया है। इनपुट के लिए @xnor को धन्यवाद!
जोनाथन एलन

2
मुझे लगता है कि स्ट्रिंग्स के लिए खाते के बिना यह एक बेहतर चुनौती होगी। यह केवल कुछ भाषाओं के लिए बाइट जोड़ रहा है IMO
कॉनर ओ'ब्रायन

@ ConorO'Brien या हो सकता है कि मुझे इसे उत्तरदाता तक बनाना चाहिए था यदि वे एक सूची के रूप में एक स्ट्रिंग का इलाज करना चाहते थे या नहीं। दुर्भाग्य से मैंने विशेष रूप से दोनों समुदाय से पूछा "क्या कोई किनारे मामले हैं जिन्हें मुझे जोड़ना चाहिए?", और "क्या परिभाषा की किसी भी स्पष्टीकरण की आवश्यकता है?" और नौ दिनों में सैंडबॉक्स में कोई प्रतिक्रिया नहीं मिली ... और अब मुझे लगता है कि इस तरह का प्रश्न एक डुप्लिकेट होगा?
जोनाथन एलन

जवाबों:


5

जेली , 8 बाइट्स

߀-ŒḊ?‘S

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

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

पायथन, 42 बाइट्स

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

एक गैर-सूची के लिए, आउटपुट 0. एक सूची के लिए, इसकी लंबाई का उत्पादन और इसके तत्वों के लिए पुनरावर्ती आउटपुट का योग।

सूचियाँ पायथन 2 ऑर्डर में ऊपर और नीचे के तारों से गिरती हैं, आवश्यकता होती है []<=x<''। इसके बजाय, हम जांच करते हैं x*0==[], जबकि 0एक संख्या या ''स्ट्रिंग के लिए परिणाम ।


6

जावास्क्रिप्ट (ईएस 6), 39 37 बाइट्स

2 बाइट्स @ edc65 की बदौलत सहेजे गए

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

38 बाइट्स:f=a=>a.map?a.reduce((s,x)=>s+f(x),0):0
सेठी

@Sethi किसी इनपुट के लिए 0 नहीं लौटाएगी? आपको 1कहीं न कहीं अंदर डालना होगा।
ETHproductions

1
37: f=a=>a.map&&a.map(x=>a-=~f(x),a=0)&&a-=~1 चार्ट से कम है +=1+और, एक बूलियन को पूर्णांक में परिवर्तित करते हुए, यह एक और चरित्र को काट देता है। aवैश्विक चर से बचने के लिए पुन: उपयोग कर रहा हैt
edc65

@ edc65 धन्यवाद, यह बहुत अच्छा है!
ETHproductions

5

गणितज्ञ, 20 बाइट्स

Length@Level[#,∞]&

अनाम फ़ंक्शन। एक अभिव्यक्ति को इनपुट के रूप में लेता है और आउटपुट के रूप में एक नंबर देता है। यूनिकोड वर्ण U + 221E की जानकारी है \[Infinity]Level[#,∞]इनपुट के सबटेक्शंस की एक सूची देता है, और Length@उन्हें गिनता है।


बूम! मेरे जवाब पर स्लैम डूबा। लेकिन मुझे कुछ नया पता चला :)
ग्रेग मार्टिन

5

गणितज्ञ, 14 बाइट्स

LeafCount@#-1&

मेरे पिछले उत्तर का मामूली संशोधन । जैसा कि मैंने वहां बताया, LeafCountपहले से ही नेस्टेड परमाणु मूल्यों का ध्यान रखता है, लेकिन यह सबसे बाहरी सूची को भी गिनाता है, जिसे हमें परिणाम से घटाना होगा।


4

पर्ल, 34 बाइट्स

एक पुनरावर्ती समारोह! हां, पर्ल में केवल रेगेक्स ही नहीं है, बल्कि फंक्शन भी हैं!

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

यदि आप इसका परीक्षण करना चाहते हैं, तो आप कुछ इस तरह से चला सकते हैं:

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

3

गणितज्ञ, 32 बाइट्स

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

पुनरावर्ती कार्य। अंश #0/@#~Select~ListQइनपुट के प्रत्येक तत्व पर फिर से फ़ंक्शन को कॉल करता है जो एक सूची है, और Trउन मानों को ऊपर रखता है। सौभाग्य से गणितज्ञ खाली सूची की लंबाई लेने और खाली सूची से योग्यता वाले तत्वों की खोज करने के लिए ठीक है, इसलिए आधार मामले की आवश्यकता नहीं है।


2

हास्केल, 52 बाइट्स

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

उपयोग उदाहरण:

*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

हास्केल मिश्रित सूचियों (जैसे इंट और इंट की सूची) का समर्थन नहीं करता है, इसलिए मैं एक कस्टम सूची प्रकार के साथ जाता हूं Lजो या तो कुछ प्रकार (-> E a) या अन्य एलएस (-> N[L a]) की सूची का एक तत्व है । आरएस की गणना एक सरल पुनरावृत्ति है जहां एक Eमायने रखता है 1और Nएक प्लस इसके तत्वों के पुनरावर्ती आकार का योग है। पूरी राशि 1 से बंद है, इसलिए मैं इसके माध्यम से घटाता हूं pred

साइड नोट: तत्वों के सटीक प्रकार और मूल्य एल्गोरिथ्म के लिए महत्वपूर्ण नहीं हैं, इसलिए हम केवल सार तत्वों के साथ बहुरूपता को दूर कर सकते हैं और साथ जा सकते हैं data L=E|N[L]


2

फैक्टर, 105 बाइट्स

पुनरावर्ती कार्य जी।

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

अनगढ़ (थोड़े):

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

आप पाएंगे कि कोई कॉल नहीं है lengthक्योंकि लंबाई बिल्ट का उपयोग करने के बजाय, इसे drop 1स्ट्रिंग्स और नॉन-सीक्वेंस के माध्यम से कार्यान्वित किया जाता है ।


2

गणितज्ञ, 18 बाइट्स

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

फिर भी एक और गणितज्ञ दृष्टिकोण। बिल्ट-इन का उपयोग करते हुए उतना छोटा नहीं है, LeafCountलेकिन फिर भी काफी संक्षिप्त है। यह MapAllऑपरेटर का उपयोग करता है //@जो एक अभिव्यक्ति के प्रत्येक नोड पर एक फ़ंक्शन को कॉल करता है, और हम उस फ़ंक्शन का उपयोग एक काउंटर बढ़ाने के लिए करते हैं c। जैसा कि LeafCountमामले में, यह हमारी ज़रूरत से एक अधिक देता है, क्योंकि यह बाहरी सूची के प्रमुख को भी गिनता है, इसलिए हम काउंटर को शुरू करते हैं -1


2

सी # (विज़ुअल सी # इंटरएक्टिव कंपाइलर) , 50 बाइट्स

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

इसे ऑनलाइन आज़माएं!

पहले प्रस्तुत किए गए जावा उत्तर के समान तकनीक का उपयोग करता है , लेकिन उत्तर की लंबाई कम करने के लिए LINQ का लाभ उठाता है।

स्पष्टीकरण:

// 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 (विरासत), 22 17 बाइट्स

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

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

इस चुनौती से 05AB1E में कई चुनौतियों का सामना करना पड़ता है:

  1. यद्यपि 05AB1E में एक पुन: सक्रिय कार्य होता है क्योंकि एलिक्जिर रीराइट ( λ), यह पूर्णांक अनुक्रमों के लिए उपयोगी है। यहाँ मेरा एक जवाब है, 05AB1E पुनरावर्ती कार्य के उदाहरण के रूप में। उसके कारण, मुझे पुनरावर्ती कॉल करने के लिए एक विकल्प खोजना पड़ा, जो मैंने एक स्ट्रिंग में कोड का हिस्सा डालकर किया था, और उस स्ट्रिंग को 05AB1E कोड के रूप में पुनरावर्ती रूप से निष्पादित किया।
  2. isList05AB1E में एक कमांड भी नहीं है , इसलिए मुझे लिस्ट में रैपिंग का उपयोग करके, गहरी सपाटता और समानता की जांच करने के लिए कुछ वर्कअराउंड का उपयोग करना पड़ा।
  3. और तीसरा, बहु-आयामी सूची के सिर्फ एक स्तर के लिए एक समतल नहीं है। समतल फ़ंक्शन ˜एक गहरा समतल है जो सभी परतों को हटा देता है और एक बहुआयामी सूची को सभी आंतरिक-सबसे अधिक मूल्यों के साथ एकल सूची बनाता है। (यानी [[1,2],[[[3]],4]]बन जाता है [1,2,3,4])।

मैंने उपरोक्त सभी तीन मुद्दों को दूर करने के लिए शीर्ष पर कोड के साथ समाप्त किया। यह तीन प्रमुख भागों में विभाजित है। पहले हमारे पास निम्नलिखित हैं:

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

स्ट्रिंग में निम्न कोड है:

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

फ़ॉरच-लूप के बजाय एक मानचित्र का उपयोग किया जाता है, क्योंकि मानचित्र में एक निहित है y, और एक फ़ॉरच-लूप के लिए स्पष्ट रूप से आवश्यक है y। हम केवल के बारे में परवाह है counter_variable, हालांकि।

और आखिरकार, सभी मानचित्र और आंतरिक मानचित्र किए जाने के बाद, हम करेंगे:

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


1

सी, 174 167 152 बाइट्स

रिकर्सिव फ़ंक्शन f, जो मेमोरी को लीक करता है ( 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;}

पुनरावर्ती, fजो 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;
}

"लेकिन कैसे," आप पूछते हैं, "इसका उत्तर सी में हो सकता है? निश्चित रूप से, सी में कोई प्रबंधित सरणियां नहीं हैं, और आप वास्तव में विषम सरणियां नहीं कर सकते हैं ...?"

"अहा," मैं उत्तर देता हूं, "क्योंकि मैं (GNU-ish) C11 और ISO C ++ 11" के लिए "ऑब्जेक्ट" की एक सरल प्रणाली पर काम कर रहा हूं।

इस समारोह के लिए पूरा डेमो कार्यक्रम है:

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

अभी, यह यहाँ रहता है और आपको इसके उपयोग के लिए रेपो की आवश्यकता होगी।

आपको libfnvअपने प्लेटफ़ॉर्म के लिए संकलित फाउलर-नॉल-वो हैश लाइब्रेरी की भी आवश्यकता होगी । यह उस रिपॉजिटरी में है और आप इसे यहां ले भी सकते हैं

तब आप कर सकते हैं cc -DNODEBUG size.c path/to/libfnv.a -o size

कार्यान्वयन जरूरी नहीं है:

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

लेकिन यह काम करता है! मास्टर के लिए अंतिम प्रतिबद्ध (जो इस कार्यक्रम को संकलित किया गया था) 2 दिन पहले था, जिसका अर्थ है कि यह जमा मान्य है।


1

एक्सिओम 118 बाइट्स

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

परिणाम

(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

एपीएल (एनएआरएस), 24 चार्ट, 48 बाइट्स

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

यह यहाँ 'मेरे' एशियोम उत्तर का लिबरल ट्रैसलेशन होगा ... APL में शून्य सूची be Zilde होगी, जिसे आप ´ [] ´, ´⊂⍬´ ´ [[]] ´, ´ के साथ इंगित करते हैं। 1 2 3´ ´ [1,2,3] 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     

अन्य प्रकार के परिणामों को प्रिंट करने के लिए व्यायाम का प्रस्ताव है कि हमें एक दूसरे फ़ंक्शन की आवश्यकता है (दोनों फ़ंक्शन आरएस और रुपये व्यायाम के लिए ठीक होना चाहिए)

  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

यह देखने के लिए कि हम 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
└∊─────────────────────────────────────────────────────────┘

यह प्रिंट Zilde, और एक 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

जावा, 96 बाइट्स

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

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

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

अटैची , 21 बाइट्स

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

इसे ऑनलाइन आज़माएं!

पता चला है सी # दृष्टिकोण अताशे में बहुत कम है।

वैकल्पिक

25 बाइट्स f[x]:=#x+Sum!f=>IsArray\x

26 बाइट्स f[x]:=#x+Sum[f=>IsArray\x]

35 बाइट्स f:=Sum##{If[IsArray@_,1+f@_,1]}=>Id

35 बाइट्स f:=Sum@Map[{If[IsArray@_,1+f@_,1]}]

37 बाइट्स f[x]:=Sum[{If[IsArray@_,1+f@_,1]}=>x]


1

क्लोजर, 79 77 51 बाइट्स

इनपुट के लिए एक सूची होनी चाहिए, न कि वेक्टर की। दोनों का उपयोग करके समर्थित किया जाएगा sequential?

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

पिछला:

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

-1

पायथन, 72 बाइट्स

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

आप वहाँ कुछ रिक्तियाँ निकाल सकते हैं
ब्लू

विशेष रूप से, बीच 0और if, 0और else, और )और for
जकार्इ

2
यदि आपको अपने चैट बॉट खाते के लिए प्रतिनिधि की आवश्यकता है, तो साइट पर एक सार्थक योगदान करने पर विचार करें। यह पहले से मौजूद 42 बाइट पायथन जवाब पर बिल्कुल कुछ नहीं जोड़ता है।
डेनिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.