ईएस 6 (जावास्क्रिप्ट), 250, 171, 154, 149, 147 बाइट्स
एक शुद्ध जावास्क्रिप्ट संस्करण।
"मेटाप्रोग्रामिंग" (यहां अन्य उत्तरों की तरह), इनपुट प्रोग्राम टेक्स्ट को संबंधित जावास्क्रिप्ट प्रोग्राम में परिवर्तित करता है, इसके लिए कई तरह के डायरेक्ट टेक्स्ट सब्स्क्रिप्शन्स लागू करता है (जैसे कि प्रोग्राम स्ट्रक्चर को जैसा है) रखना।
शायद आगे गोल्फ हो सकता है।
अद्यतन (v2.1)
- माइनस दो बाइट्स (टर्नरी अभिव्यक्ति में कोष्ठक हटा दिया गया)
- परिणाम निष्कर्षण के लिए चर का उपयोग करके और अतिरिक्त "[]
अद्यतन (v2)
बस एहसास हुआ कि ईएस सरणियों में लंबित कॉमा पूरी तरह से वैध हैं, इसलिए पूरे कॉमा सामान्यीकरण कोड को हटाया जा सकता है। वर्णमाला देखने के अनुकूलन पर @Titus द्वारा एक उत्कृष्ट सलाह का भी पालन किया।
अद्यतन (v1)
हटाए गए डुप्लिकेट "बदलें" उपनाम।
अद्यतन (v1)
बेहतर वर्णमाला का उपयोग करें: () => 1+ [] => 0 {} => 2 * <> => 2 / (प्रत्येक चार्ट को सीधे मूल्य या ऑपरेटर के रूप में फिर से उपयोग किया जा सकता है)
बदला हुआ कम () बदलें के साथ () (वर्णमाला मानचित्रण)
निरंतर इनलाइनिंग, ओपन और क्लोजिंग ब्रैकेट प्रोसेसिंग को एक स्टेप में मिला दिया
गोल्फ (v2.1)
s=>eval("o="+s.replace(/./g,r=>"2+1-3*3/"["()[]{}<>".indexOf(r)]).replace(/\d\D?|\D/g,r=>r[1]?r[0]-2+",":r*1?'([':`].reduce((r,a)=>r${r}a)),`)+"o
गोल्फ (v1)
(s,A="(2)+[1]-{3}*<3>/")=>eval(s[R="replace"](/./g,r=>A[A.indexOf(r)+1])[R](/\d\D?|\D/g,r=>r[1]?r[0]-2+",":(r[0]*1?'([':`].reduce((r,a)=>r${r}a)),`))[R](/,(\])|,$/g,"$1"))
गोल्फ (v0)
([...s],A="(a)b[c]d{e}f<g>h",R="replace")=>eval(s.reduce((r,c)=>r+=A[A.indexOf(c)+1],'')[R](/ab|cd|ef|gh/g,r=>({d:-1,b:'0'}[r[1]]||1) + ',')[R](/[aceg]/g,"([")[R](/[bdfh]/g,r=>`].reduce((r,a)=>r${"+*-/"["bfdh".indexOf(r)]}a)),`)[R](/,(\])|,$/g,"$1"))
समझाया (v0)
//BEGIN
//s - input text, A - alphabet, R - "String.replace()" alias
E=([...s],A="(a)b[c]d{e}f<g>h",R="replace")=>eval(
//Replace input alphabet by a more friendly one, to avoid too much escaping and quoting
// () - ab, [] -cd, {} - ef, <> - gh
s.reduce((r,c)=>r+=A[A.indexOf(c)+1],'')
//Replace no-arg invocations with a corresponding constant value
// () => 0, [] => -1, {} => 1, <> => 1
[R](/ab|cd|ef|gh/g,r=>({d:-1,b:'0'}[r[1]]||1) + ',')
//Replace opening brackets with "(["
[R](/[aceg]/g,"([")
//Replace closing brackets with "].reduce(...)),"
//An arithmetic operation to apply (+-*/) is chosen based on the bracket type
//and is substituted into the template
[R](/[bdfh]/g,r=>`].reduce((r,a)=>r${"+*-/"["bfdh".indexOf(r)]}a)),`)
//Strip excessive commas
[R](/,(\])|,$/g,"$1")
);
//END: eval() the result
Example:
E("{([]<>()<>{})(<><>)}")
=> eval("([([-1,1,0,1,1].reduce((r,a)=>r+a)),([1,1].reduce((r,a)=>r+a))].reduce((r,a)=>r*a))")
=> 4
परीक्षा
E=([...s],A="(a)b[c]d{e}f<g>h",R="replace")=>eval(s.reduce((r,c)=>r+=A[A.indexOf(c)+1],'')[R](/ab|cd|ef|gh/g,r=>({d:-1,b:'0'}[r[1]]||1) + ',')[R](/[aceg]/g,"([")[R](/[bdfh]/g,r=>`].reduce((r,a)=>r${"+*-/"["bfdh".indexOf(r)]}a)),`)[R](/,(\])|,$/g,"$1"))
T=(s,a)=>{
console.log(s,r=E(s),r==a?"OK":"NOT OK");
}
T("()",0)
T("(()())",0)
T("([][])",-2)
T("({}<>)",2)
T("({}[])",0)
T("[]",-1)
T("[[][]]",0)
T("[()<>]",-1)
T("{()}",0)
T("{([]<>)}",0)
टेस्ट आउटपुट
() 0 OK
(()()) 0 OK
([][]) -2 OK
({}<>) 2 OK
({}[]) 0 OK
[] -1 OK
[[][]] 0 OK
[()<>] -1 OK
{()} 0 OK
{([]<>)} 0 OK