একটি সাধারণ সংখ্যা সিস্টেম


19

একটি সহজ নম্বর সিস্টেম সম্পর্কে আমি আপনাকে বলি। (যা আমি কেবল এই চ্যালেঞ্জের জন্য তৈরি করেছি)

এই সিস্টেম ফাংশন রয়েছে (), [], {}, এবং <>

1। ()

যখন ()কোনও যুক্তি দেওয়া হয় না, তখন এটি মূল্যায়ন করে 0

যখন ()এক বা একাধিক যুক্তি দেওয়া হয়, তখন এটি আর্গুমেন্টের যোগফলের মূল্যায়ন করে।

2। []

যখন []কোনও যুক্তি দেওয়া হয় না, তখন এটি মূল্যায়ন করে -1

যখন []এক বা একাধিক আর্গুমেন্ট দেওয়া হয়, তখন এটি প্রথম যুক্তি বিয়োগ করে অন্যান্য তর্কগুলির যোগফলকে মূল্যায়ন করে।

3। {}

যখন {}কোনও যুক্তি দেওয়া হয় না, তখন এটি মূল্যায়ন করে 1

যখন {}এক বা একাধিক যুক্তি দেওয়া হয়, তখন সেগুলি যুক্তিগুলির পণ্যের মূল্যায়ন করে।

4। <>

যখন <>কোনও যুক্তি দেওয়া হয় না, তখন এটি মূল্যায়ন করে 1

যখন <>এক বা একাধিক আর্গুমেন্ট দেওয়া হয়, এটি অন্য যুক্তিগুলির পণ্য দ্বারা বিভক্ত প্রথম আর্গুমেন্ট পূর্ণসংখ্যার সাথে মূল্যায়ন করে।

তোমার কাজ

এই সাধারণ সংখ্যা সিস্টেমে একটি স্ট্রিং দেওয়া হয়েছে যাতে একটি বৈধ সংখ্যা রয়েছে (যার মানে বন্ধনীগুলি সুষম হয়, 0 সে, ইত্যাদি দ্বারা বিভাজন নয়) তার মানটি মুদ্রণ করুন।

পরীক্ষার মামলা

() -> 0
(()()) -> 0
([][]) -> -2
({}<>) -> 2
({}[]) -> 0
[] -> -1
[[][]] -> 0
[()<>] -> -1
{()} -> 0
{([]<>)} -> 0

মনে রাখবেন, এটি , তাই সবচেয়ে কম বাইটের কোডটি জয়ী।


13
এর জন্য আমার একটি দুর্দান্ত নাম রয়েছে, যা আমি পুরোপুরি তৈরি করেছি এবং অন্য কোথাও থেকে পাইনি: মস্তিষ্ক-ফ্লেক!
ইটিএইচ প্রডাকশনগুলি

4
@ ইথ প্রডাকশন নং
অলিভার নি


2
বিভাগ কি ভাসমান বিভাগ বা পূর্ণসংখ্যা বিভাগ?
xnor

1
@ অলিভার যখন এক বা উভয় অপারেশন নেতিবাচক থাকে তখন পূর্ণসংখ্যা বিভাগ কীভাবে কাজ করবে? 4 ফলাফলগুলি প্রত্যাশিত কি কি 5/3, 5/-3, -5/3এবং -5/-3?
মার্টিন ইন্ডার

উত্তর:


2

ডায়ালগ এপিএল , 94 বাইট

o←{(⊂(1⊃⍵),⍺⍺⊃⍵),2↓⍵}⋄u←{(⊃⍵,⍺⍺1)⍺⍺⍵⍵/1↓⍵}⋄⍎⍕'+/o' '-u+o' '×/o' '÷u×o' '(⊂⍬),'[')]}>'⍳⌽⍞],'⊂⍬'

ব্যবহারসমূহ ⎕IO←0

প্রতিস্থাপন )]}>একটি ফাংশন কল যে একটি স্ট্যাক লাগে, তার শীর্ষ ফ্রেমে একটি অপারেশন প্রযোজ্য, মোছা হয়, এবং তার পরবর্তী ফ্রেমে ফলাফলের appends (পরমাণুসদৃশ্য অপারেটর oযে জন্য ব্যবহার করা হয়; dyadic অপারেটর uহ্যান্ডলগুলি আরো জটিল মামলা -এবং ÷)

([{<কোডের সাথে প্রতিস্থাপন করে যা স্ট্যাকটিতে একটি ফ্রেম যুক্ত করে ( (⊂⍬),)

একটি ফাঁকা ফ্রেমের প্রাথমিক স্ট্যাক ( ⊂⍬) এর ফলস্বরূপ অভিব্যক্তি (বিপরীতভাবে, এপিএল কার্যকর করার আদেশের সাথে মেলে) সম্পাদন করে


5

হাস্কেল, 357 306 277 251 228 224 188 185 180 বাইট

একটি স্পষ্ট স্ট্যাক সহ একটি টোকেন-ভিত্তিক পার্সার। (%)একটি টোকেন স্ট্যাক এবং একটি অক্ষর নেয় এবং হয় ধাক্কা দেয় (ওপকোড, ডিফল্ট নাম্বার) বা (0, সংখ্যা) এর জন্য ({[<, অথবা শীর্ষস্থানীয় সংখ্যা এবং একটি অপকোড পপ করে এবং উত্তরটির জন্য ধাক্কা দেয় )}]>। ওপকোডগুলি এসকিআই এনুমারেশন হ্যাক দ্বারা এনকোড করা হয়।

কুতোস @ ক্রিশ্চিয়ন্সসিভারকে তার দুর্দান্ত উত্তরের জন্য যে আমি কিছু ধারণা নিয়েছি।

এক রৈখিক!

s%c|elem c"([<{",g<-div(fromEnum c)25=(g,[0,0,1,-1,1]!!g):s|(a,(o,n):b)<-span((==0).fst)s=(0,[foldr1(flip$[(+),quot,(-),(*)]!!(o-1))$snd<$>a,n]!!(0^length a)):b
snd.head.foldl(%)[]

এখন কম ত্রুটি-পরিচালনা সহ! ব্যবহার:

*Main> map (snd.head.foldl(%)[]) ["()","(()())","([][])","({}<>)","({}[])","[]","[[][]]","[()<>]","{()}","{([]<>)}"]
[0,0,-2,2,0,-1,0,-1,0,0]

14 + 3 বাইট সংরক্ষণের জন্য @ ক্রিশ্চিয়ন্সসিভারকে ধন্যবাদ!

কিছু + 4 বাইট সংরক্ষণ করার জন্য @ জগারবকে ধন্যবাদ!


1
কেমন হয় (0,[0,0,1,-1,1]!!o):sপঞ্চম লাইনে?
খ্রিস্টান সিভর্স

@ ক্রিশ্চিয়ান্সসিভার অবশ্যই!
অ্যাংস

সংজ্ঞাগুলি স্যুইচ করুন !, যাতে আপনি (s:_)!_=d sদ্বিতীয় কেস হিসাবে করতে পারেন । এছাড়াও, আমি মনে করি আপনি x<-p$d<$>init a,y<-d$last aশেষ ক্ষেত্রে বাঁধাই করতে পারেন %
জাগারব

@ জগারব ধন্যবাদ! আমি আরও বেশি মূল্যায়ন একীভূত করার একটি উপায় খুঁজে পেয়েছি।
অ্যাং

1
তৃতীয় লাইনে %আপনি প্যারেনগুলি চারপাশে _:bএবং ছেড়ে দিতে পারেন g c
জাগারব

3

পাইথন 2, 292 265 248 235 223 206 204 বাইট

r=reduce
s=input()
for n in')]}>':s=s.replace(n,'),')
for a in'(*x:sum(x)','[a=-1,*x:a-sum(x)','{*x:r(int.__mul__,x,1)','<a=1,*x:r(int.__div__,x,a)':s=s.replace(a[0],'(lambda %s)('%a[1:])
print eval(s)[0]

সমস্ত ব্র্যাকেটকে ল্যাম্বদা দিয়ে প্রতিস্থাপন করে যা বন্ধনী যা করে তা করে, তারপরে ফলাফল পাইথন কোডটি মূল্যায়ন করে। তার ইনপুট মত কোট দ্বারা বেষ্টিত প্রয়োজন, '[<><>([]{})]'

এই প্রোগ্রামটি প্রতিটি স্ট্রিংয়ের প্রথম অক্ষর হিসাবে বন্ধনীর ধরণ সংরক্ষণ করে এবং বাকি forকীওয়ার্ডের পরে সমস্ত কিছু lambda। এরপরে এটি প্রথম অক্ষরটিকে বিকল্প হিসাবে ব্যবহার করে; এটির বাকী অংশগুলি ল্যাম্বদার মতো একত্রিত হয় (lambda*x:sum(x))()

আইডিয়নে চেষ্টা করে দেখুন!


3

PEG.js (ES6) , 132 বাইট

x=a:[([{<]b:x*[)\]}>]{var x='([<'.indexOf(a)
b.length^1||b.push(0)
return~~eval(b.length?b.join(('+-/'[x]||'*')+' '):~-('10'[x]||2))}

এখনই ঠিক করা উচিত।

ব্যাখ্যা

আরও পঠনযোগ্য:

x=a:[([{<]
  b:x*
  [)\]}>]
{
  var x='([<'.indexOf(a)
  b.length^1||b.push(0)
  return ~~eval(
    b.length?
      b.join(('+-/'[x]||'*')+' ')
    :~-('10'[x]||2))
  )
}

PEG.js জাভা স্ক্রিপ্টের একটি বর্ধিত সংস্করণ যা বিশেষত পার্সিংয়ের জন্য তৈরি। এটি অত্যন্ত কঠোর, এজন্য আমাকে ব্যবহার করতে হয়েছিলvar । তদতিরিক্ত, স্ট্রিংয়ের ভিতরে বন্ধনীগুলির সাথে একটি বাগ রয়েছে বলে মনে হচ্ছে যা কোডটি উল্লেখযোগ্যভাবে ফুলেছে।

শুরু করার জন্য, আমরা একটি নিয়ম সংজ্ঞায়িত করি যা নিয়মের সাথে xমেলে aএমন একাধিক অভিব্যক্তি থাকতে পারে বা না থাকতে পারে এমন কোনও বন্ধনীর সাথে মেলে x

প্রতিটি ম্যাচ শাসন করার জন্য x, আমরা এর দৈর্ঘ্য 1 bহলে অভ্যন্তরীণ ম্যাচের অ্যারেতে 0 bটি চাপি।

তাহলে bএর দৈর্ঘ্য> 0, তারপর আমরা সূচী এটি aমধ্যে ([<এবং থেকে একটি অক্ষর পেতে +-/যে সূচক ব্যবহার করে। যদি ফলাফলটি অপরিজ্ঞাত হয় (যার অর্থ aছিল {), তবে আমরা ফলাফলটিকে রূপান্তর করি *। অবশেষে, আমরা একটি স্পেসে পরীক্ষা করি এবং যোগদান করিb ফলাফলের সাথে ।

তাহলে bএর দৈর্ঘ্য = 0, তাহলে আমরা সূচক এটি aমধ্যে ([<এবং থেকে একটি অক্ষর পেতে 10যে সূচক ব্যবহার করে। যদি ফলাফলটি অপরিজ্ঞাত হয় (যার অর্থ aছিল {বা ছিল <), তবে আমরা ফলাফলটি ২ এ পরিণত করি Finally শেষ পর্যন্ত, আমরা কেবল হ্রাস করি।

শেষে, আমরা কেবল প্রকাশটি মূল্যায়ন করতে পারি এবং ফলাফলটি মেঝেতে পারি।


3

পার্ল, 113 + 2 = 115 বাইট

-lp(2 বাইট পেনাল্টি) দিয়ে চালান ।

/\W/,eval"sub $`\{\$#_?(shift)$&&$'1}"for qw'a+a:1- b-a:- c*c: d/c:';y/([{</a-d/;s/\W/0),/g;s/\pL\K/(/g;$_=eval

আরও পঠনযোগ্য (দ্রষ্টব্য: এই "আরও পঠনযোগ্য সংস্করণ" আসলে চলবে না, কারণ আমি এমন জায়গায় মন্তব্য রেখেছি যেগুলি সিনট্যাক্টিকভাবে অনুমোদিত নয়):

              # -p option: read a line of input into $_ at program start
              # -l option: remove the final newline whenever reading
do {          # for each element of a list, given later:
  /\W/;       # place an initial identifier in $`, the next character in
              # $&, and the rest of the element in $'
  eval qq{    # then evaluate the following template, with substitutions:
    sub $` {  # define a subroutine named $`, that does this:
      \$#_ ?  # if there is more than one argument                   
      (shift) # then return the first argument $&-ed with
      $& &$'  # the result of a recursive call with the tail of the arguments
              # else (the "else" is a colon taken from $', not the template)
      1       # return (the remainder of $' applied to) 1
    }
  }
} for qw'     # specify the list by splitting the following on whitespace:        
  a+a:1-      # a(head,tail) = len(tail>1) ? head+a(tail) : 1-1
  b-a:-       # b(head,tail) = len(tail>1) ? head-a(tail) : -1
  c*c:        # c(head,tail) = len(tail>1) ? head*c(tail) : 1
  d/c:        # d(head,tail) = len(tail>1) ? head/c(tail) : 1
';
y/([{</a-d/;  # replace ( [ { < with a b c d in $_
s/\W/0),/g;   # replace whitespace, punctuation in $_ with the string "0),"
s/\pL\K/(/g;  # place a ( after (\K) each letter (\pL) in $_
$_=eval       # evaluate $_ as a Perl program, storing the result back in $_
              # -p option: print $_ to the user at program end
              # -l option: output a newline whenever printing

মূল ধারণাটি হ'ল আমরা পাঠ্য প্রক্রিয়াজাতকরণের মাধ্যমে [()<>]পার্ল প্রোগ্রামের মতো একটি ইনপুট রূপান্তর করছি b(a(0),d(0),0),; পার্ল ঠিক আছে ঠিক আছে কমা দিয়ে। এর আগে আমরা ফাংশন সংজ্ঞায়িত a, b, c, dহিসাবে একই প্রভাব (), [], {}, <>ভাষা আমরা বাস্তবায়ন করছি থেকে নির্মান; তারা প্রত্যেকে তাদের শেষ যুক্তি (শেষে 0 টি) উপেক্ষা করে, যা সমস্ত ইনপুট সঠিকভাবে বিশ্লেষণ করে তা নিশ্চিত করার জন্য অন্তর্ভুক্ত থাকে এবং কার্যকরী প্রোগ্রামিংয়ে সাধারণত দেখা যায় যেখানে মাথা এবং পুচ্ছ পৃথকভাবে প্রক্রিয়াজাত করা হয় using কারণ এর b(e,f,g,0)অর্থ e-f-g, অর্থাত্ তার প্রথম যুক্তিকে বিশেষভাবে aবিবেচনা করে , যেখানে এর যুক্তিগুলিকে প্রতিসম ( a(e,f,g,0)মানে e+f+g) ব্যবহার করে, আমরা প্রয়োগ করিaপুনরাবৃত্তি এবং bকলিংয়ের মাধ্যমে acএবং dএকই সম্পর্ক আছে। এই ফাংশনগুলির চারটিই খুব একই রকম, তাই আমরা এগুলি পৃথকভাবে প্রয়োগের পরিবর্তে রানটাইমে এগুলি উত্পন্ন করি; আমরা একটি টেম্পলেট সংরক্ষণ করি যা স্ট্রিংয়ের চারটি ফাংশনের ক্ষেত্রে প্রযোজ্য, তারপরে টেমপ্লেটে অক্ষরগুলি স্থির করে ফাংশনগুলি তৈরি করে।

পার্ল যেহেতু /ভাসমান-পয়েন্ট বিভাগ করে, বাস্তবায়িতও {}খুব করে। আমি ধরে নিচ্ছি যে এটি হয় এটির নিজস্ব ক্ষেত্রে কোনও সমস্যা নয়, বা -Minteger(সমস্ত গাণিতিক ক্রিয়াকলাপগুলি পূর্ণসংখ্যার ক্রিয়া হয় এমন একটি ভাষা বৈকল্পিক নির্বাচন করা) নিখরচায়, কারণ অন্যথায় আমাকে পার্লে পূর্ণসংখ্যা বিভাগ লেখার জন্য অতিরিক্ত বাইট ব্যয় করতে হবে, যা মূলত সমস্যাটি বলে মনে হচ্ছে না। (আমার মনে হয় আপনাকে চারটি বাইট পরিবর্তন (shift)করতে হবে int+(shift); আমি এটি পরীক্ষা করিনি))



2

পিএইচপি, 315 300 285 258 250 244 বাইট

for($s=$argv[1];$r=!$r;)foreach(["(+)1","[-]0","{*}2","</>2]as$p)if(preg_match("#$e$p[0]([-_\d]*)$e$p[2]#",$s,$m)){if(""==$v=strtok($m[1],_))$v=$p[3]-1;while(""<$n=strtok(_))eval("\$v$p[1]=$n;");$s=strtr($s,[$m[$r=0]=>_.$v]);}echo substr($s,1);

আন্ডারস্কোর + মান সহ উপ-এক্সপ্রেশনগুলি প্রতিস্থাপন করে; পুনরাবৃত্তি যখন কোনও প্রতিস্থাপন না করে লুপ ব্রেক।

আমি সি এর সাথে প্রথম দেখা হওয়ার 19 বছর, পিএইচপি এর সাথে 17 বছর কাজ করে;
এই প্রথম এটি strtokবোঝার ... 24 বাইট সংরক্ষণ করতে সাহায্য!

ভাঙ্গন

for($s=$argv[1];    // take input from argument
    $r=!$r;)        // toggle $r; loop until no replacement has taken place
    foreach(["(+)1","[-]0","{*}2","</>2]as$p) // loop through operations
        if(preg_match("#$e$p[0]([-_\d]*)$e$p[2]#",$s,$m))   // find a match
        {
            if(""==$v=strtok($m[1],_))  // init $v with first token from sub-match
                $v=$p[3]-1;             // if no token, init with default value
            while(""<$n=strtok(_))      // loop through tokens
                eval("\$v$p[1]=$n;");       // operate
            $s=strtr($s,[$m[$r=0]=>_.$v]);  // reset $r; replace match with underscore+value
        }
echo substr($s,1);  // print result

@ অলিভার এখানে কাউকে মারছেন না; তবে মজার জন্য ধন্যবাদ!
তিতাস

2

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

1
আপনার ভি0 সংস্করণটি s.reduce((r,c)=>r+="abcdefgh"["()[]{}<>".indexOf(c)],'')(-5) দিয়ে যেতে পারে ? যদি তা হয় তবে indexOfআপনি কোনও ভেরিয়েবলের কথা মনে রাখতে পারেন এবং অপারেটরটিকে তৃতীয় স্ট্রিং আক্ষরিক থেকে নিতে পারেন।
তিতাস

2

হাস্কেল, 184 179 172 161 160 159 151 148 145 বাইট

s%(c:i)|elem c")}]>"=([1?(*),sum,1?quot,(-1)?(-)]!!mod(fromEnum c)5$s,i)|(r,j)<-[]%i=(s++[r])%j
[v]%e=(v,e)
(v?_)[]=v
(_?o)s=foldl1 o s
fst.([]%)

পুনরাবৃত্তির উত্স, ইনপুট থ্রেডিং কারণ হাস্কেল। যথারীতি, শেষ লাইনটি কোনও সংজ্ঞা নয়, তবে সমস্যাটি সমাধান করে এমন ফাংশনটি উল্লেখ করে। সুতরাং পরীক্ষা করতে, কোনও ফাইলের মধ্যে শেষটি ব্যতীত লাইনগুলি রাখুন, এটি লোড করুন এবং এরকম কিছু করুন:

*Main> fst.([]%) $ "{([][][])([][])}"
6

অনুপ্রেরণার জন্য @ জগারব এবং প্রচুর বিশদ ইঙ্গিতগুলি এবং তাঁর সমাধান এবং আরও ইঙ্গিতগুলি থেকে অনুপ্রেরণার জন্য @ জঞ্জালকে ধন্যবাদ।

নেতিবাচক পূর্ণসংখ্যার সাথে বিভাগ কীভাবে আচরণ করা উচিত তা নির্দিষ্ট করা হয়নি। যাইহোক, বারবার ব্যবহার করা divভুল বলে মনে হয়, কারণ এটি divঅবশিষ্ট মানগুলির পণ্যটি একবার ব্যবহার করার মতো নয় । এখন ব্যবহার করে quot, আমি <{}([][])[]>এবং এর জন্য একই ফলাফল পেয়েছি <{}{([][])[]}>

সুন্দর জন্য, প্রায় পঠনযোগ্য কোডটি প্রথম সংস্করণে দেখুন। মধ্যবর্তী সংস্করণগুলিতে সমস্ত ধরণের সুন্দর এবং ভয় দেখানোর কোড রয়েছে এবং এই সংস্করণটি বুঝতে সহায়তা করে।


আমি মনে করি আপনি সুস্পষ্ট টিপলগুলির পরিবর্তে সংজ্ঞা (!)=(,)এবং ব্যবহার করে কয়েকটি বাইট সংরক্ষণ করতে পারেন !
জাগারব

যদি আপনি সংজ্ঞায়িত করেন m xএবং d xহিসাবে 1#xএবং 0#x, আপনি কেসগুলি m[x]এবং d[x]একটিতে মার্জ করতে পারেন যা আমি মনে করি কিছু বাইটও সংরক্ষণ করে।
জাগারব

@ জগারব ধন্যবাদ! আমি সর্বশেষ জুটিটি প্রায় মিস করেছি, যা ছাড়া !কৌশলটি প্রদান করে না। আপনার দ্বিতীয় পরামর্শটি খারাপ, আমার প্রায় পঠনযোগ্য কোডটি চলে ... চালাক!
খ্রিস্টান সিভর্স

হেই, আমি ঠিক বুঝতে পেরেছি যে সংজ্ঞায়িত করা s%(c:i)=(s?c,i)এবং s?')'=sum sইত্যাদি আরও খাটো হবে, যেহেতু আপনি বারবার iএস থেকে পরিত্রাণ পেতে পারেন । .. না অপেক্ষা করো না, সম্ভবত s%(_:i)মামলার কারণে এটি কাজ করবে না ।
জাগারব

1
ব্যাকটিকগুলি হারাতে হবে elemএবং divএটি আরও কিছু বাইট সংরক্ষণ করতে পারে।
Zgarb

1

জাভাস্ক্রিপ্ট (ES6), না eval, 156 বাইট

f=s=>s==(s=s.replace(/(.) ?([- \d]*)[\]})>]/,(_,c,s)=>` `+(s?s.split` `.reduce((l,r)=>c<`<`?l- -r:c<`[`?l/r|0:c<`{`?l-r:l*r):c==`[`?-1:c==`(`?0:1)))?+s:f(s)

ব্যাখ্যা: রেজিএক্সপেক্স প্রথম প্রসেসোসড ক্লোজিং ব্র্যাকেটটি সন্ধান করে এবং (সম্ভবত) সংশ্লিষ্ট খোলার বন্ধনী এবং এর মধ্যে যে কোনও যুক্তিগুলির সাথে মিলে। অপারেশন অনুযায়ী আর্গুমেন্টগুলি বিভক্ত এবং হ্রাস করা হয়েছে (দুঃখের সাথে '(' এবং '[' এর জন্য অনুকূল জোড় নয় +এবং -)), বা যদি কোনও যুক্তি না থাকে তবে উপযুক্ত মান গণনা করা হয় (আবার মানগুলির সাথে অক্ষরের মিলটি সাবঅপটিমাল আমার দৃষ্টিকোণ থেকে) ফলাফলটি একটি শীর্ষস্থানীয় স্থানের সাথে প্রতিস্থাপিত হয় যাতে এটি অন্যান্য ফলাফল থেকে পৃথক করতে পারে The ফাংশনটি তারপরে নিজেকে পুনরাবৃত্তভাবে ডাকে যতক্ষণ না কোনও পরিবর্তন আনতে না পারে, সেক্ষেত্রে ফলাফলটির মানটি ফেরত দেয়। উদাহরণ:

[()<>]
[ 0<>]
[ 0 1]
 -1

f ("([] []])") => 0 (2 এর পরিবর্তে)
জেপেলিন

কিছু অন্যান্য পরীক্ষা আমার জন্যও ব্যর্থ হচ্ছে (আপনি আমার উত্তরে পরীক্ষার কোডটি দিতে পারেন ), সম্ভবত: f ("[]") => 0 এর কারণে, "[]" প্রতিটি ব্যর্থ পরীক্ষারই একটি অংশ।
zeppelin

@ জেপেলিন ওফস, এটি কিছু খারাপ গল্ফিংয়ের কারণে হয়েছিল। আমি পূর্ববর্তী সংস্করণে ফিরে এসেছি, তবে দুঃখের বিষয় এর জন্য আমার কয়েকটা বাইট খরচ হয়।
নিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.