ES6 (জাভাস্ক্রিপ্ট), 250, 171, 154, 149, 147 বাইট
একটি খাঁটি জাভাস্ক্রিপ্ট সংস্করণ।
"ধাতব প্রোগ্রামিং" (অন্যান্য বেশিরভাগ উত্তরের মতো এখানে) ইনপুট প্রোগ্রামের পাঠ্যটিকে বিভিন্ন জাভাস্ক্রিপ্ট প্রোগ্রামে রূপান্তর করে, এতে সরাসরি প্রত্যক্ষ পাঠ্য বিকল্প প্রয়োগ করে (যেমন প্রোগ্রামের কাঠামোটিকে যেমন রাখা হয়)।
সম্ভবত আরও গল্ফ করা যেতে পারে।
আপডেট (v2.1)
- মাইনাস দুটি বাইট (ত্রৈমাসিক অভিব্যক্তিতে প্যারেনেসিস সরানো)
- গল্ফড আরও 5 বাইট বন্ধ, ফলাফল নিষ্কাশন জন্য ভেরিয়েবল ব্যবহার করে এবং অতিরিক্ত "[]" পরিত্রাণ পেয়ে
আপডেট (ভি 2)
ঠিক বুঝতে পেরেছি যে ES অ্যারেগুলিতে মুলতুবি থাকা কমাগুলি সম্পূর্ণ বৈধ, সুতরাং সম্পূর্ণ কমা সাধারণীকরণ কোডটি সরানো যেতে পারে। বর্ণমালা অনুসন্ধানের অনুকূলকরণের জন্য @ টিটাসের দ্বারা একটি দুর্দান্ত পরামর্শ অনুসরণ করেছেন।
আপডেট (ভি 1)
অনুলিপি "প্রতিস্থাপন" নামটি সরিয়ে ফেলা হয়েছে।
আপডেট (ভি 1)
আরও ভাল বর্ণমালা ব্যবহার করুন: () => 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
গল্ফড (ভি 1)
(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