सूची की सूची को सद-सूची में दर्ज करें


12

इस चुनौती में, आपको सूचियों की सूची को सरल सूची प्रारूप में पार्स करना चाहिए।

यह चुनौती मेरे सैडफ्लक पार्सर पर आधारित है। मेरे साडफ्लक पार्सर में, यह सभी () को हटा दिया गया है, सूची की शुरुआत में () के योग के साथ, कार्यक्रम को तेज़ी से चलाने के लिए।

सैड-लिस्ट में पार्स करने के लिए, आपको यह करना होगा (पायथन इम्प्लीमेंटेशन चीज़, ट्यूल ऑफ़ टपल का उपयोग करता है):

def sadlistfunc(list):
    new-sadlist = [0]
    for i in list:
        if i == ():
            new-sadlist[0]+=1
        else:
            new-sadlist.append(sadlistfunc(i))

यह एक पुनरावर्ती कार्य है। किसी सूची के लिए, सूची इनपुट से () की संख्या से शुरू होकर, एक नई सूची शुरू करें, फिर इस सूची के बाकी क्रम में सूची सूची से एक () नहीं था, जो प्रत्येक सूची का दु: खद सूची संस्करण है। सूची वापस करें।

इनपुट:

आप कुछ अलग स्वरूपों में इनपुट ले सकते हैं:

  • आप इसे एक सूची के रूप में ले सकते हैं
  • आप इसे टुप के रूप में ले सकते हैं
  • आप इसे एक स्ट्रिंग के रूप में ले सकते हैं

यदि आप इसे एक स्ट्रिंग के रूप में लेते हैं, तो आपको कुछ सेट कोष्ठक का उपयोग करना चाहिए, जैसा कि मस्तिष्क-परत में दिखाई देता है। आप वर्ण 1 और 2 का उपयोग नहीं कर सकते हैं

बस उचित हो

इनपुट हमेशा एक सूची के अंदर होगा, लेकिन आपका कार्यक्रम इनपुट के बाहर एक अंतर्निहित सूची परत मान सकता है, अर्थात () () (= = () () (), या यह नहीं चुन सकता है। उदाहरण स्पष्ट बाहरी सूची के साथ होंगे

उत्पादन:

सूची या ट्यूल या स्ट्रिंग, या जो कुछ भी हो सकता है। जैसा कि मेटा सर्वसम्मति है आप उचित आउटपुट प्रारूप का उपयोग कर सकते हैं।

उदाहरण:

(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]

ध्यान दें कि इनपुट सख्त नहीं है। ये इनपुट हो सकते हैं:

[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]

या कुछ अन्य उचित प्रारूप

समझाया गया टेस्ट केस:

(()()((())())())

इसे "दुखद" करने के लिए, पहले हम () की संख्या गिनते हैं

 ()()        ()
(    ((())())  )

3. फिर हम इन्हें हटाते हैं, और शुरुआत में एक 3 जोड़ते हैं

(3,((())()))

इस सूची में एक सूची है। हम इसे दु: ख देते हैं

((())())

कितने ()?

     ()
((())  )

1. हम शुरू में 1 निकालते हैं और जोड़ते हैं

(1,(()))

इसमें इसकी एक सूची है

(())

गिनती

 ()
(  )

निकालें और गिनती जोड़ें

(1)

फिर हमने इसे वापस इसकी सूची में डाल दिया

(1,(1))

फिर हमने इसे वापस इसकी सूची में डाल दिया

(3,(1,(1)))

किया हुआ

यह , इसलिए कम बेहतर है


ध्यान दें कि वास्तविक उदास-फ्लैक पार्सर में, संख्या () वास्तव में सूची का दूसरा आइटम है, और पहला आइटम कमांड का सूचकांक है
विनाशकारी नींबू

अच्छा राजभाषा 'जावास्क्रिप्ट for... in, मुझे याद है कि आप इसका उपयोग क्यों नहीं करते हैं: फिडल
स्टीफन

मुझे लगता है ((((())())())(())()) = [1, [1, [1, [1]], [1]]होना चाहिए ((((())())())(())()) = [1, [1, [1, [1]]], [1]]
रेन्जो

जवाबों:


4

पायथ , 13 बाइट्स

L+]/bYyM-b]Yy

टेस्ट सूट

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

L+]/bYyM-b]Yy
L               define a function y with argument b:
   /bY              list 1: count how many [] can be found in b
  ]                         wrap into singleton
        -b]Y        list 2: filter out [] from b
      yM                    apply y (this function) to each
 +                  concatenate the two lists above
            y   apply y to the input

आप पहले हटा सकते हैं ]
आउटगोल्फ


2

ब्रेकीलॉग , 21 बाइट्स

;[[]]x{↰₀}ᵐA&{∋∅}ᶜg,A

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


बाइट्स और वर्ण समतुल्य नहीं हैं। UTF-8 का उपयोग करना, जो केवल 21 वर्णों के होने के बावजूद 33 बाइट्स तक ले जाएगा ।
समाधि

1
@Samadi Brachylog अपने स्वयं के कोड पृष्ठ का उपयोग करता है , जिसे इस मेटा उत्तर के अनुसार अनुमति दी जाती है ।
लीक नून

ओह समझा। मैं थोड़ा उलझन में था । स्पष्टीकरण देने के लिए धन्यवाद!
सामदी

@ समाधि कोई समस्या नहीं है, यह सवाल हर समय पूछा जाता है।
लीक नून

2

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

{#~Count~{0},##&@@#~DeleteCases~{0}}&//@#&

का उपयोग करके स्पष्ट पुनरावृत्ति से बचा जाता है //@( MapAll) जो एक पेड़ में प्रत्येक नोड पर एक फ़ंक्शन को मैप करता है। इसका मतलब यह भी है कि कार्यों को पत्तियों से ऊपर की तरफ निष्पादित किया जाता है। हालाँकि, यह भी लागू किया जाएगा {}जो {0}प्रक्रिया में बदल जाता है। इसलिए हम {0}इसके बजाय गिनते और हटाते हैं {}



2

क्लोजर, 59 बाइट्स

(fn f[i](conj(map f(remove #{[]}i))(count(filter #{[]}i))))

राष्ट्रमंडल के उत्तर से बहुत अलग नहीं है । इसके countऔर removeकुछ अच्छे निर्माण को स्वीकार करने के लिए लगता है, यहाँ मुझे सेट का उपयोग करना था।


2

दरअसल , 12 बाइट्स

;[]@c@;░Q£Mo

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

स्पष्ट बाहरी ब्रेकरों के साथ अल्पविराम से अलग वर्ग-ब्रैकेट सूची के रूप में इनपुट लेता है।

स्पष्टीकरण:

;[]@c@;░Q£Mo
;[]@c         count the number of empty lists
     @;░      filter out empty lists
        Q£Mo  recurse with filtered list and append result

2

पायथन 2 , 69 46 45 बाइट्स

f=lambda l:[l.count([])]+map(f,filter(len,l))

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


मुझे लगता है कि आपको f=फ़ंक्शन बाय का उपयोग करने की आवश्यकता है , क्योंकि आप फ़ंक्शन का उपयोग कर रहे हैं, और इसका नामकरण अन्यथा आपके समाधान को तोड़ देगा
लियो

@ आप सही हैं।
ओवन्स

1

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

Tị߀;@ċ“”$

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

सूचियों की सूची के रूप में इनपुट लेता है ...

बेशक यह एल्गोरिथ्म का उपयोग करता है अन्य उत्तर का उपयोग करते हैं। ;)


वह 10 बाइट्स नहीं है। यह 10 अक्षर है । बाइट्स की संख्या इस बात पर निर्भर करेगी कि आप किस एन्कोडिंग का उपयोग करते हैं।
समाधि

2
@Samadi नहीं, जेली में एक समर्पित चरित्र सेट है जो इसकी डिफ़ॉल्ट है, और यह उन पात्रों को एक बाइट के रूप में प्रतिनिधित्व कर सकता है। देखें यहाँ
अदम

समझा। स्पष्टीकरण के लिए धन्यवाद!
सामदी

1

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

data L=I Int|T[L]deriving Show
(I n:r)#m=r#(n+m)
(x:r)#m=x:r#m
_#m=[I m]
f(T[])=I 1
f(T t)=T$map f t#0

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

क्योंकि हास्केल कड़ाई से टाइप किया गया है, कोई मनमाने ढंग से नेस्टेड सूची नहीं हैं। एक उपाय के रूप में data L=I Int|T[L]deriving Showपेड़ की तरह नेस्टेड सूचियों को घोषित करता है जिसमें या तो लीप या खाली सूची होती है।

इनपुट दूसरे उदाहरण के प्रारूप की तरह है, Tप्रत्येक उद्घाटन ब्रेस से पहले एक अतिरिक्त कंस्ट्रक्टर के साथ T[T[T[]],T[],T[T[]]]:। वही आउटपुट के लिए जाता है, जिसमें प्रत्येक संख्या एक कंस्ट्रक्टर द्वारा पूर्ववर्ती होती है I। क्रियाशीलता दु: खदf प्रदर्शन करती है ।

परीक्षण मामलों के लिए आउटपुट:

T [I 3]
T [T [T [I 1],I 0],I 0]
T [T [I 1],T [I 1],I 1]
T [T [T [T [I 1],I 1],I 1],T [I 1],I 1]

1

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

golfed:

let m=a=>!a.length||a.map(m).reduce((b,c)=>(c.length?b.push(c):b[0]++,b),[0])

Ungolfed:

const traverse = arr => !arr.length || arr
    .map(traverse)
    .reduce(
        (accum, val) => (val.length ? accum.push(val) : accum[0]++, accum),
        [0]
    );

डेमो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.