বহুপদী এক্সপ্রেশন স্ট্রিং মূল্যায়ন করুন


18

এমন একটি ক্রিয়াকলাপ তৈরি করুন যা বহুপদী সমীকরণ নেয়, যার মান x এবং অপারেশনের ফলাফল প্রদান করে।

উদাহরণ: প্রদত্ত 4x^2+2x-5এবং x=3আউটপুট37 । এটিই এর ফলাফল4(3)^2+2(3)-5

  • ধরুন সমস্ত পলিনোমিয়ালগুলি বৈধ
  • বহুপদী বিন্যাস সর্বদা থাকবে coefficient(variable)^exponent => 4x^2 বাদে থাকবে:
    • যখন অভিজাত হয় 1তা হবেcoefficient(variable) => 4x
    • সহগ যখন 1এটি হবে(variable)^exponent => x^2
  • পলিনোমিয়ালগুলি কেবল একটি পরিবর্তনশীল
  • বাহ্যিক গ্রন্থাগারগুলির ব্যবহার নিষিদ্ধ
  • সহগ এবং পরিবর্তনশীল ইনপুটটি ইতিবাচক এবং negativeণাত্মক সংখ্যা হতে পারে।

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

  • ("3x^3-5x^2+2x-10", 5) => 250
  • ("10x^4-5x^3-10x^2+3x+50", 3) => 644
  • ("10x+20", 10) => 120
  • ("-20x^2+20x-50", -8) => -1490
  • ("9", 5) => 9
  • ("8x^2+5", 0) => 5

হালনাগাদ

  • বহুপদী বিন্যাস সর্বদাcoefficient(variable)^exponent => 4x^2 বাদে থাকবে:
    • যখন অভিজাত হয় 1তা হবেcoefficient(variable) => 4x
    • সহগ যখন 1এটি হবে(variable)^exponent => x^2
  • নেতিবাচক অভিজাতের বিধি সরানো হয়েছে। আমার ভুল. একটি বৈধ বহুবর্ষে নেতিবাচক উদ্দীপক থাকে না
  • একটি উদ্দীপক ন্যায়বিচারক 0হবেcoefficient
  • জন্য পরীক্ষার কেস যুক্ত করা হয়েছে input 0

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।


3
ইনপুট ফর্ম্যাটটি কতটা নমনীয়? পরিবর্তে 3x^3-5x^2+2x-10আমরা ইনপুট করতে পারি 3*x^3-5*x^2+2*x-10? নাকি [3 -5 2 -10]. [3 2 1 0]?
লুইস মেন্ডো

1
@ আরনাউল্ড হ্যাঁ ...
লুইস

4
একটি "বাহ্যিক গ্রন্থাগার" কী এবং এটি কীভাবে ন্যায্য, যে ভাষাগুলি ইতিমধ্যে একটি বৈশিষ্ট্য হিসাবে প্রয়োগ করা হয়েছে "ইভাল" রয়েছে তার তুলনায়?
অলিভিয়ার গ্রাগোয়ার

1
আমার ক্ষমাপ্রার্থী আমি গতকাল থেকে আমার পিসি ব্যবহার করি নি। আপনি আমাকে যে পরামর্শ দিয়েছিলেন তা দিয়ে আমি চ্যালেঞ্জটি আপডেট করেছি। দয়া করে এটি দেখুন এবং সবকিছু ঠিক থাকলে এটি আবার খুলুন।
লুইস ফিলিপ দে জেসুস মুনোজ

উত্তর:


12

জাভাস্ক্রিপ্ট (ES7), 48 বাইট

@ রিকহিচককের একটি পরামর্শের ভিত্তিতে

Xবড় হাতের মধ্যে আশা । বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (p)(X)

p=>X=>eval(p.replace(/[X^]/g,c=>c<{}?'*X':'**'))

এটি অনলাইন চেষ্টা করুন!


জাভাস্ক্রিপ্ট (ES7), 49 বাইট

@ ডেডপসসাম হিসাবে একই পন্থা । বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (p)(x)

p=>x=>eval(p.split`x`.join`*x`.split`^`.join`**`)

এটি অনলাইন চেষ্টা করুন!


1
আমি মনে করি আপনি এটি ব্যবহার করে একটি দম্পতি বাইট সংরক্ষণ করতে পারেন replace: p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
রিক হিচকক

@ রিকহিচকক বাাইট fগণনায় অন্তর্ভুক্ত না করা পর্যন্ত আমি কোনও রেফারেন্স ব্যবহার করতে পারব না, এটি সংরক্ষণ করা হবে বলে মনে করা 2 বাইটের দামে at যদিও আমি এই পদ্ধতিটি পছন্দ করি। কোনও একরকম পুনর্নির্মাণের মাধ্যমে বাইট বা দুটি সংরক্ষণের কোনও উপায় থাকতে পারে।
আর্নল্ড

2
@ রিকহিচকক যদি আমরা Xবড় হাতের মধ্যে নিতে পারি তবে আমরা a<{}?'*X':'**'একটি বাইট সংরক্ষণ করে তা করতে পারি । সুতরাং আমার প্রশ্ন ওপি।
আর্নল্ড

1
ক্যান্ট xএকা হ্যান্ডেল করুন
l4m2

1
@ l4m2 চ্যালেঞ্জের নিয়ম আপডেট হয়েছে। : / এটা 1xছিল আগে x
আর্নল্ড


8

পাইথন 3 , 53 50 48 বাইট

সম্পাদনা করুন : -5 বাইট ডেনিসকে ধন্যবাদ!

lambda p,x:eval(p.translate({94:"**",120:"*x"}))

এটি অনলাইন চেষ্টা করুন!

translateচেইন replaceকল এড়ানোর জন্য ব্যবহৃত ; পাইথন 3 এর সংস্করণটি translateপূর্বসূরীর চেয়ে কম বিশ্রী।


"*(%d)"%xহয়ে যেতে পারে "*(x)"
ডেনিস

আপনাকে ধন্যবাদ, আমি ঘটনাটি খুঁজে পাইনি xআমার evalসুযোগে ছিল! আমি আপডেট করব।
এটেন

1
আসলে, যেহেতু xআর স্ট্রিং প্রতিনিধিত্ব নেই, "*x"তেমনি কাজ করে।
ডেনিস

আর ভালো ! আবার ধন্যবাদ.
এটেন

5

আর , 44 বাইট

function(f,x)eval(parse(t=gsub("x","*x",f)))

এটি অনলাইন চেষ্টা করুন!

মোটামুটি প্রতিস্থাপন আর সঙ্গে সহজবোধ্য nxসঙ্গে n*xএবং তারপর ঘ পংক্তি। আমরা দ্বিতীয় যুক্তির নামটি এভাবেই ব্যবহার করি।evalparsex

Eval ফাংশন এমনকি একটি সঠিকভাবে ফরম্যাট প্রথম আর্গুমেন্ট সঙ্গে আরো সরাসরি ব্যবহার করা যেতে পারে, এবং অন্যান্য আনুষ্ঠানিক আর্গুমেন্টগুলি ( y, zইত্যাদি) সহজে যোগ করা যেতে পারে:

আর , 20 বাইট (প্রতিদ্বন্দ্বী)

function(f,x)eval(f)

এটি অনলাইন চেষ্টা করুন!




3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 113 108 বাইট

_=>x=>_.match(/-?(?:[x\d]+|\^?)+/g).reduce((a,b)=>b.split`x`[0]*(~b.indexOf`x`?x**(b.split`^`[1]||1):1)+a,0)

এটি অনলাইন চেষ্টা করুন!

@ আরনাউল্ডকে ধন্যবাদ


যেহেতু @ আরনাউল্ড (49 বাইট) দ্বারা এখনও অবধি সেরা জেএস সমাধান পোস্ট করা হয়েছে এবং এটি ব্যবহার করে eval , তাই আমি ব্যবহার করার এবং তার পরিবর্তে হ্রাস করার সিদ্ধান্ত নিয়েছি।

তার তুলনায় বেশ দীর্ঘ।

ব্যাখ্যা:

A =>                            // lambda function accepting argument 1 
    x =>                        // argument number 2 (currying syntax used)
        A.match(                // this matches all instance of what comes next 
                                // and converts to array
       /[-]?(?:[x\d]+|\^?)+/g)  // regexp for -ve sign , variable number and ^ sign 
            .reduce((a, b) =>   // reduce the array to single (take 2 params a,b)
                b.split `x`     // split b at instances of `x` 
                        [0]     // and select the first instance 
                * (b.indexOf`x` // multiply that by value of index of x in b 
                    > 0 ?       // if it is greater than 0 then 
                x **            // multiplication will be with x raised to power
               (l = b.split `^` // set variable split b at every `x` 
                   [1]||1       // choose first index otherwise set to one
                )               // this is what x is raised to the power 
                : 1)            // in the case x is not present multiply by 1
                + a,            //  add value of `a` to that value 
        0)                      // in case no reduce is possible set value to 0


এটি বর্তমানে সর্বশেষ পরীক্ষার ক্ষেত্রে ব্যর্থ হয় (0.25 হওয়া উচিত)। আপনি ব্যবহার করে একটি কয়েক বাইট সংরক্ষণ করতে পারবেন -পরিবর্তে [-], ~b.indexOf`x` পরিবর্তে b.indexOf`x`>0করেছে এবং সরিয়েছে l=যা ব্যবহার করা হয় না। (তবে এটি
ত্রুটিটি

@ আরনাউল্ড: ধন্যবাদ কেন এটি হয় তা
মুহাম্মদ সালমান

ঠিক আছে, সমস্যাটি হ'ল আপনার রেজেক্সটি বিভক্ত 1x^-2হয় -
আর্নৌল্ড

3

05 এ বি 1 ই , 16 19 বাইট

„*(I')J'xs:'^„**:.E

নেতিবাচক ইনপুটটির জন্য বাগ-ফিক্স হিসাবে +3 বাইট x

.E( ব্যাচ কোড হিসাবে রান করুন ) অ্যাডনানের এই সর্বশেষ প্রতিশ্রুতিতে রান হিসাবে পাইথনেরeval পরিবর্তে প্রতিস্থাপন করা হয়েছে , তবে এই সংস্করণটি টিআইও-তে এখনও নেই। @ মিঃ এক্সকোডার কাজ করছে কিনা তা যাচাই করতে এটি তার স্থানীয় (সর্বশেষ সংস্করণ) 05AB1E এ পরীক্ষা করেছে। কীভাবে এটি এক্সপ্রেশন স্ট্রিংতে রূপান্তরিত হয়েছে তা না দেখে এই সংস্করণটি দেখুন
.E

ব্যাখ্যা:

„*I')J'xs:    # Replace all "x" with "*(n)" (where `n` is the input-integer)
              #  i.e. 5 and 3x^3-5x^2+2x-10 → 3*(5)^3-5*(5)^2-2*(5)-10
'^„**:        # Replace all "^" with "**"
              #  i.e. 3*(5)^3-5*(5)^2-2*(5)-10 → 3*(5)**3-5*(5)**2-2*(5)-10
.E            # Evaluate as Python-eval
              #  i.e. 3*(5)**3-5*(5)**2-2*(5)-10 → 250

বিকল্প 25 28 বাইট প্রোগ্রাম যা টিআইওর বর্তমান সংস্করণে কাজ করে:

„*(I')J'xs:'^„**:“…¢(“s')J.e

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

„*(I')J'xs:'^„**:    # Same as explained above
“…¢(“                # Literal string "print("
     s               # Swap both
      ')             # Literal character ")"
        J            # Join everything together
                     #  i.e. 3*(5)**3-5*(5)**2-2*(5)-10 → print(3*(5)**3-5*(5)**2-2*(5)-10)
.e                   # Run as Python code
                     #  i.e. print(3*(5)**3-5*(5)**2-2*(5)-10) → 250

“…¢(“স্ট্রিং print(, কারণ:

  • এবং সংক্ষেপিত স্ট্রিং শুরু এবং শেষ হয়
  • …¢এটি সমান 0426কারণ এটি তথ্য.টিএসটিএসএস ফাইলে সূচকগুলি দেখায় , যেখানে সূচক 4 রয়েছে এবং and¢ রয়েছে সূচক 26 রয়েছে।
  • এই সূচকটি অভিধান-ফাইলে0426 ব্যবহৃত হয় , যেখানে লাইন 427 (সূচক 426) শব্দটি এটি এনেছে যা এই ক্ষেত্রে রয়েছে।print
  • (তাই এটি হিসাবে ব্যাখ্যা করা হয়, info.txt ফাইলে একটি সূচক নেই।

2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 143 বাইট

আমি জানি আরও ভাল উত্তর আছে কিন্তু আমি ইওল ব্যবহার না করে এটি করতে চেয়েছিলাম

(_,x)=>_.match(/[+-]?(?:[a-z0-9.]+|\^-?)+/gi).reduce((a,b)=>~~(b.split('x')[0])*(b.indexOf('x')>0?Math.pow(x,(l=(b.split('^')[1]))?l:1):1)+a,0)

এটি অনলাইন চেষ্টা করুন!


আপনার রেজেক্সের দরকার [a-z0-9.]নেই? কেবলমাত্র চিঠিটি হাজির হতে পারে x। কেন .? আপনাকে অ-পূর্ণসংখ্যার সহগ বা এক্সপোজারগুলি হ্যান্ডেল করার দরকার নেই।
পিটার কর্ডস



2

জাভা 8, 150 149 148 বাইট

n->s->new javax.script.ScriptEngineManager().getEngineByName("JS").eval(s.replace("x","*"+n).replaceAll((s="(\\-?\\d+)")+"\\^"+s,"Math.pow($1,$2)"))

নিশ্চিত নয় যে কোনও কার্ভিং লাম্বদা ফাংশন থাকতে পারে যা একটি ব্যতিক্রম ছুঁড়ে। যদি এটি হয় তবে 1 বাইট পরিবর্তন (s,n)->করে সংরক্ষণ করা যায় n->s->কীভাবে আমাকে এটি করতে দেখানোর জন্য @ অলিভিগ্রগ্রোয়ারকে -1 বাইট ধন্যবাদ জানায় ।

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

n->s->     // Method with integer and String parameters and Object return-type
  new javax.script.ScriptEngineManager().getEngineByName("JS")
            //  Use a JavaScript engine
   .eval(s  //  And eval the input
      .replace("x","*"+n)
            //   After all 'x' has been replaced with '*n'
            //   (where `n` is the input-integer)
      .replaceAll((s="(\\-?\\d+)")+"\\^"+s,"Math.pow($1,$2)"))
            //   And all `A^B` have have been replaced with `Math.pow(A,B)`
            //   (where both `A` and `B` are integers)

দুর্ভাগ্যক্রমে জাভাস্ক্রিপ্ট eval সমর্থন করে না **, সুতরাং এর Math.powপরিবর্তে রূপান্তর করতে আমাকে আরও দীর্ঘ প্রতিস্থাপন ব্যবহার করতে হবে ..


জাভাস্ক্রিপ্ট সমর্থন করে **(ES7 +), কেন এটি সমর্থন করে না?
মুহাম্মদ সালমান

জাভাতেও কোনও ফল নেই। এটা ঠিক হতে পারে না?
মুহাম্মদ সালমান

@ মুহম্মদসালমান নোপ, জাভা নেই eval। এবং আমি মনে করি এই বিল্টিন জাভাস্ক্রিপ্ট-ইভালটি দিয়ে আমি ব্যবহার করতে পারি ScriptEngineManagerকয়েক বছর ধরে জাভা ES7+
জেডিকে

মানুষ, জাভা চুষছে, কোন প্রমাণ নেই কেন? ঠিক আছে কেন এটি আপডেট হয়নি?
মুহাম্মদ সালমান

@ মুহাম্মাদসালমন আমি ডুনো .. আপনার জাভা নির্মাতাদের এই প্রশ্নটি জিজ্ঞাসা করতে হবে। ;)
কেভিন ক্রুইজসেন

2

টিআই-বেসিক, 6 বাইট

Prompt X:expr(Ans

এক্সপ্রেশনটি আর্গুমেন্ট হিসাবে নেওয়া হয় এবং এক্সটি রানটাইম চলাকালীন প্রবেশ করা হয়। বিকল্পভাবে 8 বাইট ব্যতীত expr:

Prompt X,u:u

এখানে উভয় যুক্তি রানটাইম এ প্রবেশ করা হয়।


2

অক্টাভা , 47 38 37 বাইট

একটি সংখ্যার পরিবর্তে দ্বিতীয় ইনপুটটিকে স্ট্রিং হিসাবে গ্রহণ করে প্রচুর বাইট সংরক্ষণ করা হয়েছে।

@(x,c)eval(strrep(x,'x',['*(',c,41]))

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

মোটামুটি সোজা এগিয়ে: দ্বিতীয় ইনপুটটি কোথায়, এর xদ্বারা প্রতিস্থাপন করুন এবং মূল্যায়ন করুন। পের্থেসিস প্রয়োজনীয় কারণ অক্টোবায় ।(c)c-8^2 == -64




1

রুবি , 43 41 বাইট

->p,x{eval p.gsub('^','**').gsub'x','*x'}

এটি অনলাইন চেষ্টা করুন!

@ মিস্টার এক্সকোডারকে ধন্যবাদ জানিয়ে দুটি বাইট সংরক্ষণ করা হয়েছে


যেহেতু কোনও রুবির উত্তর নেই এখনও আমি একটি যুক্ত করেছি। এনভিএম এর মধ্যে একটি ছিল যা আলাদা পদ্ধতির ব্যবহার করেছিল

ব্যাখ্যা:

->p,x{                    # lambda function that takes two arguments p and x
    eval(                 # eval 
        p.gsub(           # replace all instance of 
            '^' , '**'    # `^` with `**` (use for raised to power of)
        )                 # end gsub
        .gsub(            # start another replace all
            'x' , '*x'    # replace all instances of `x` with `*x`
        )                 # end the replace function
    )                     # end eval function
}                         # end lambda function


1

এক্সেল, ৩ + + ২ বাইট, অ-প্রতিযোগিতামূলক

সূত্র হিসাবে একটি পাঠ্য ক্ষেত্রের মূল্যায়ন সরাসরি এক্সেলের সামনে নয়। একটি গোপন =EVALUATE()ফাংশন রয়েছে, এটি একটি নাম নির্দিষ্ট করে বলা যেতে পারে।

এক্সেল 2007 এ, সূত্র> নাম সংজ্ঞায়িত করুন। রেফার্স সহ একটি নাম সংজ্ঞায়িত করুন E:

=EVALUATE(SUBSTITUTE(A1,"x","*"&B1))

তারপর, মধ্যে ফর্মুলা ইনপুট দিয়ে A1, xমান B1, লিখে =Eমধ্যে C1আয় ফলাফলের প্রত্যাশিত।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.