একটি লিনিয়ার সমীকরণ সমাধান করুন


12

এই চ্যালেঞ্জ কিন্তু একটি ভাল অনুমান সঙ্গে।

ফটকা খেলা

আপনার প্রোগ্রামটি একটি একক ভেরিয়েবল xএবং এর মান আউটপুট সমেত একটি রৈখিক সমীকরণ নেবে x

ইনপুট / পার্সিং

  • ইনপুটটিতে কেবল সংখ্যা, অপারেটর, প্রথম বন্ধনী ( ()) x, এবং একটি =চিহ্ন থাকবে (এর অর্থ কোনও সাদা জায়গা নেই)।
  • প্যারেন্টেসিস সর্বদা ভারসাম্যপূর্ণ হবে।
  • সর্বদা কমপক্ষে 1 থাকবে x। একটি xএকটি সংখ্যা পূর্বে হতে পারে।
  • সমস্ত সমীকরণের ঠিক একটি ফলাফল হবে।

এই পদক্ষেপগুলি অনুসরণ করে একটি সংখ্যার সংজ্ঞা দেওয়া যেতে পারে। বেশ কয়েকটি Regex দ্বারা সংজ্ঞায়িত করা যেতে পারে: -?(\d+(\.\d+)?|\.\d+)


আপনি যদি রেজেক্স না বলেন: একটি অঙ্ক হিসাবে সংজ্ঞায়িত করা হয় 0-9

  1. এটির -শুরুতে এটিতে নেতিবাচক ইঙ্গিত দেওয়া হতে পারে
  2. তারপরে কিছু অঙ্ক থাকতে পারে। যদি তারা কোনও অঙ্ক না হয় তবে দশমিক পয়েন্ট থাকবে
  3. যদি একটি দশমিক বিন্দু বিদ্যমান থাকে তবে কমপক্ষে একটি অঙ্ক এটি অনুসরণ করবে

বৃহত্তম নম্বর / মানটি আপনার ভাষার দক্ষতা দ্বারা সংজ্ঞায়িত করা হবে।


একটি অপারেটর : কোনো হয় +-*/, তারা সবসময় সংখ্যার মধ্যে দেখানো হবে, এবং বা প্রথম বন্ধনী

এর অর্থ (5)(5)সরলতার জন্য কোনও বৈধ ইনপুট নয়।


প্যারেন্টেসিসে সর্বদা তাদের ভিতরে একটি বৈধ এক্সপ্রেশন (সংখ্যার এবং / বা অপারেটরগুলির একটি বৈধ সংমিশ্রণ) থাকবে। "ভারসাম্যযুক্ত" প্রথম বন্ধনী হিসাবে সংজ্ঞায়িত করা হয় যেহেতু প্রত্যেকটির (একটি সম্পর্কিত ক্লোজিং থাকবে)

মূল্যায়ন

  • ক্রিয়াকলাপের ক্রম অনুসরণ করা উচিত এবং এর পূর্বরূপগুলি (সর্বোচ্চ থেকে সর্বনিম্ন):
    • প্যারেনথেসিস (সবচেয়ে গভীরভাবে প্রথমে নেস্টেড)
    • গুণ ও বিভাগ
    • সংযোজন এবং বিয়োগ
  • যদি একই নজিরযুক্ত দুটি অপারেটর দেখা দেয় তবে আপনার বামে -> ডানদিকে যেতে পছন্দ করা উচিত

আউটপুট

আপনার ফলাফলটি কোনওভাবে আউটপুট করা উচিত। যদি আপনি কেবলমাত্র সংখ্যার ফলাফল আউটপুট না করেন তবে কীভাবে আউটপুট আউটপুট হয় তা আপনার উত্তরটিতে পরিষ্কার করুন। আপনার আউটপুট ফর্ম্যাটটি সামঞ্জস্যপূর্ণ হওয়া উচিত। আউটপুট দশমিক হতে পারে, তবে এটি সর্বদা যুক্তিযুক্ত হবে, যথার্থতা আপনার ভাষার নির্ভুলতার মধ্যে সীমাবদ্ধ। কেবলমাত্র যদি আপনার ভাষা ভাসমান পয়েন্ট গণিত সমর্থন করে না, আপনাকে সমর্থন করার প্রয়োজন হবে না।

বিধি

  • বিল্ট-ইনগুলি এই কাজটিকে তুচ্ছ করে তোলার অনুমতি দেওয়া হয়েছে তবে , আপনাকে অবশ্যই [uses built-in]উত্তরের শিরোনামে স্পষ্টভাবে যুক্ত করতে হবে । এটি আপনার উত্তরকে বিজয়ী করা থেকে রেহাই দেয়
  • একটি "বিল্ট-ইনগুলি এই কার্যকে তুচ্ছ করে দেখানো" যে কোনও:
    • এমন কিছু যা একটি সমীকরণ নেয় এবং একটি / ভেরিয়েবলের মানকে আউটপুট করে
    • এমন কিছু যা সমীকরণকে সম্পূর্ণ সরল করে দেবে
    • পার্সিংয়ের evalউল্লেখযোগ্য পরিমাণে করতে কোনও সম্পর্কিত ফাংশন ব্যবহার করা বা করা। evalরৈখিক সমীকরণগুলি সমাধান করতে (ইনপুটটিতে সর্বনিম্ন পরিবর্তন সহ) ব্যবহার করা হয় এবং সম্পর্কিত ফাংশনগুলির ব্যবহার নিষিদ্ধ করা হয়।
    • যদি আপনার সন্দেহ হয় তবে কেবল একটি মন্তব্যে জিজ্ঞাসা করুন।
  • যে বিল্ট-ইনগুলি সমীকরণটিকে পার্স করে তা অনুমোদিত

উদাহরণ

3+4=x
7

4+x=5
1

3+3*3=x
12

3x-4=7+2x
11

3--1=x
4

3*(2+4x)=7x-4
-2

1.2+2.3x=5.8
2

10=4x
2.5

ইনভ্যালিড ইনপুট:

(5)(4)=x  no operator between (5) and (4)
5(x+3)=2  no operator 5 and (...)
x=y       the only variable is x
4=3       there is no x
x+3=x-7   no solution
x=x       infinite solutions
+5=x      + is not an unary operator. -5=x would be valid though
1/(x-3)=5 Nonlinear
3/x       Nonlinear

8
আপনি বলেছেন যে বিল্ট-ইনগুলি আপনার জমাটিকে অযোগ্য ঘোষণা করবে, তবে কেবল সমীকরণ সমাধান এবং পার্সিং এবং এর মতো অপারেশনগুলিকে বোঝাতে এটি পরিষ্কার করুন। আমি মনে করি যে এটি কোনও আলাদা শব্দ ব্যবহার করা আরও পরিষ্কার হবে, যেহেতু আমি কোনও নামকৃত অপারেশনটিকে বিল্ট-ইন হিসাবে মনে করি।
এক্সনোর

উত্তরগুলি কতটা সঠিক হতে হবে?
flawr

@ মিপ্রিপাবলিক আপনার প্রোগ্রামটি একটি একক ভেরিয়েবল সমন্বিত রৈখিক সমীকরণ গ্রহণ করবে ...
লুইস মেন্ডো

এছাড়াও, জাভাস্ক্রিপ্টের evalগণনা কি চ্যালেঞ্জকে তুচ্ছ হিসাবে চিহ্নিত করে? এছাড়াও, new Function(...)গণনা ফর্ম হবে ?
কনর ও'ব্রায়েন

@ CᴏɴᴏʀO'Bʀɪᴇɴ নির্ভর করে আপনি এটির জন্য কী ব্যবহার করেন। তবে
ধরেই নিচ্ছেন

উত্তর:


3

জাভাস্ক্রিপ্ট ES6, 246 বাইট

এখনও কিছু গল্ফিং করা উচিত, তবে কমপক্ষে এটি একটি সমাধান!

C=a=>new Function("x","return "+a.replace(/(\d)x/g,"$1*x"));n=>{n=n.split("=");t=Math.abs,r=C(n[0]),c=C(n[1]),a=0,i=r(a)-c(a);a++;v=r(a)-c(a);o=t(i)<t(v)?-1:1;for(u=1/0;r(a)!==c(a);)a+=o,e=t(r(a)-c(a)),e>u&&(u=1/0,o/=10),u=Math.min(e,u);return a}

n=>{n=n.split("=")...এটি ব্যবহার করার জন্য ফাংশনটির নাম দিন ।

অধি ungolfed:

function solveLinear(equation){
    equation = equation.split("=");
    var abs = Math.abs;
    var LHS = convertToFunction(equation[0]), RHS = convertToFunction(equation[1]);
    var pivot = 0;
    var dir;
    var dir1 = LHS(pivot) - RHS(pivot);
    pivot++;
    var dir2 = LHS(pivot) - RHS(pivot);
    if(abs(dir1)<abs(dir2)) dir = -1;
    else dir = 1;
    var dif, minDif = Infinity;
    while(LHS(pivot) !== RHS(pivot)){
        pivot += dir;
        dif = abs(LHS(pivot) - RHS(pivot));
        if(dif > minDif){
            minDif = Infinity;
            dir /= 10;
        }
        minDif = Math.min(dif, minDif);
        console.log(pivot,dir,dif,minDif);
    }
    return {
        x: pivot,
        LHS: LHS,
        RHS: RHS
    };
}

এটি একটি পাইভট পদ্ধতির ব্যবহার করে। (আমি নিশ্চিত নই যে এটিই কি আলগোরিদিম বলা হয়েছিল, কেবল একটি নাম যা আমি আবিষ্কার করেছি।) এটি প্রথমে শূন্য থেকে কোন দিকটি অনুসন্ধান করবে তা সংগ্রহ করে (অর্থাত সমীকরণের উভয় পক্ষের opালুটি ছেদ করবে) এবং মান খুঁজছেন। এটি যখন সর্বনিম্ন পার্থক্যের একটি বিন্দু খুঁজে পায়, এটি সেই বিন্দুতে যায় এবং অনুসন্ধানের বৃদ্ধি হ্রাস পায়। এটি শেষ পর্যন্ত আমাদের প্রয়োজনীয় সমাধানের যথাযথ ফলন দেয়।


আমি মনে করি আপনি নতুন ফাংশনটির পরিবর্তে eval + ES6 সিনট্যাক্স ব্যবহার করে খুব ভাল শেভ করতে পারেন
ভেন

2

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

a=>eval(`f=x=>${a[R='replace'](/(\d)x/g,"$1*x")[R]("=","-(")[R](/-/g,"+-")})`)(0)/(f(0)-f(1))

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

-13 বাইটস @ টিএসএফকে ধন্যবাদ

Ungolfed:

var h=a=>{
  a=a.replace(/(\d)x/g,"$1*x").replace("=","-(").replace("--","- -"); //get into an eval-able form
  var f=x=>eval(a+")");
  var df=(f(1)-f(0))/(1-0) //derivative or slope of the function
  var x=0;
  return x-(f(x)/df); //newton's method
}

Explaination:

এই সমাধানটি শিকড়গুলি অনুসন্ধানের জন্য নিউটনের পদ্ধতি দ্বারা কাজ করে । কোডটি বাম হাতের কাছ থেকে সমীকরণের ডানদিকে বিয়োগ করে, যেমন কখন f(x)=0, xআমরা যে মানটির জন্য সমাধান করছি তার সমান হবে। অতএব, আমরা যখন এই নতুন ফাংশনের মূলটি পাই তখন এটি আমাদের কাঙ্ক্ষিত xমান হবে। তারপরে এটি f'(x)ফাংশনের দুটি পয়েন্টের মধ্যে ope াল সন্ধান করে ডেরাইভেটিভ সন্ধান করে। তারপরে, মানগুলি নিউটনের পদ্ধতিতে সন্নিবেশ করা হয় যা মূলের একটি আনুমানিক জন্য বলা হয় x, x=x-(f(x)/f'(x))( কোডটিতে আমরা প্রাথমিক xমান হিসাবে 0 ব্যবহার করি )। যেহেতু এটি শিকড়গুলি আবিষ্কার করে, এটি আমাদের xমূল্য সন্ধান করে। এবং যেহেতু সমীকরণটি লিনিয়ার হওয়ার গ্যারান্টিযুক্ত, তাই অনুমানটি সঠিক হবে।



1

ম্যাথক্যাড, [অন্তর্নির্মিত ব্যবহারগুলি]

এখানে চিত্র বর্ণনা লিখুন

ম্যাথক্যাডে এই জাতীয় সমীকরণগুলি সমাধান করার দুটি অন্তর্নির্মিত পদ্ধতি রয়েছে:

  • সিম্বলিক সলভার (কীওয়ার্ড সলিউড ব্যবহার করে)
  • সলভ ব্লক (যা উভয় সংখ্যাসূচক এবং প্রতীকী পদ্ধতিতে কাজ করে)। সলভ ব্লক প্রদত্ত কীওয়ার্ড দিয়ে শুরু হয়, আগ্রহের শর্তগুলি সংজ্ঞা দিয়ে প্রকাশের সংকলন অনুসরণ করে সমাধান করা কীওয়ার্ডগুলির মধ্যে একটি দ্বারা বন্ধ করা হয়, যেমন Find (যা একটি সঠিক সমাধান খুঁজে বের করে) বা MinErr (যা লক্ষ্য এবং এর মধ্যে ত্রুটি হ্রাস করে) যে কোনও সমাধান)।

প্রতীকী solver y = x দিয়ে বেশ খুশি এবং সমাধানটি x = y দিয়ে দেয়।

ম্যাথক্যাডের সাথে অপরিচিতদের জন্য, নীচের চিত্রটি ডাব্লুওয়াইএসআইওয়াইওয়াইগিশ ম্যাথক্যাড 15 ওয়ার্কবুক থেকে সরাসরি নেওয়া হয়েছে। যেখানে লেখা হয়েছে সেগুলির যে কোনও মত প্রকাশের পরিবর্তনের ফলে ম্যাথক্যাড এর উত্তরটি পুনরায় মূল্যায়ন করবে এবং সেই অনুযায়ী ডিসপ্লে আপডেট করবে।


অলস কৌতূহলের বাইরে, ডাউনভোটস কেন? আমি বুঝতে পারি যে এর সরলতা এর মূলে থাকতে পারে তবে এটি সংক্ষেপে টিআই বেসিক সমাধানের চেয়ে আলাদা নয় বলে মনে হয় যা বিল্ট-ইন সলভারকে কল করার আগে কেবল সামান্য পরিমাণের ইনপুট প্রসেসিং যোগ করে এবং এখনও নিচে ভোট ছিল না।
স্টুয়ার্ট ব্রুফ

1
এই প্রোগ্রামের আসল বাইট গণনাটি কী?
জো কিং

ডাউনভোটগুলি সম্ভবত আপনার সমাধানটি তুচ্ছ বলে মনে হচ্ছে - দেখুন 'তুচ্ছ সমাধান কী?' মেটাতে

0

অ্যাক্সিয়াম, 214 বাইট [অন্তর্নির্মিত ব্যবহার]

q(t:EQ POLY FLOAT):Any==(a:=[variables(lhs t),variables(rhs t)];a.1~=[x]and a.1~=[]=>%i;a.2~=[x]and a.2~=[]=>%i;a.1=[]and a.2=[]=>%i;a.1=[x]and degree(lhs t,x)>1=>%i;a.2=[x]and degree(rhs t,x)>1=>%i;rhs solve(t).1)

কিছু ত্রুটির জন্য% i ফিরে আসত, অন্য ধরণের ত্রুটির জন্য সিস্টেম থেকে ফাংশন বন্ধ হয়ে যায়, 1--2 হিসাবে অন্য কিছু ভাষা থেকে অজানা মনে হয় ... পরীক্ষা:

(72) -> q(x+3=9)
   (72)  6.0
                                  Type: Complex Fraction Polynomial Float
(73) -> q(3+4=x)
   (73)  7.0
                                  Type: Complex Fraction Polynomial Float
(74) -> q(4+x=5)
   (74)  1.0
                                  Type: Complex Fraction Polynomial Float
(75) -> q(3+3*3=x)
   (75)  12.0
                                  Type: Complex Fraction Polynomial Float
(76) -> q(3*x-4=7+2*x)
   (76)  11.0
                                  Type: Complex Fraction Polynomial Float
(77) -> q(3--1=x)
  Line   1: q(3--1=x)
           .AB
  Error  A: Missing mate.
  Error  B: syntax error at top level
  Error  B: Possibly missing a )
   3 error(s) parsing
(77) -> q(3*(2+4*x)=7*x-4)
   (77)  - 2.0
                                  Type: Complex Fraction Polynomial Float
(78) -> q(1.2+2.3*x=5.8)
   (78)  2.0
                                  Type: Complex Fraction Polynomial Float
(79) -> q(10=4*x)
   (79)  2.5
                                  Type: Complex Fraction Polynomial Float
(80) -> q((5)(4)=x)
   Cannot find a definition or applicable library operation named 5
      with argument type(s)
                           PositiveInteger

  Perhaps you should use "@" to indicate the required return type,
  or "$" to specify which version of the function you need.
(80) -> q(5(x+3)=2 )
   (80)  %i
                                                    Type: Complex Integer
(81) -> q(x=y)
   (81)  %i
                                                    Type: Complex Integer
(82) -> q(4=3)
   (82)  %i
                                                    Type: Complex Integer
(83) -> q(x+3=x-7)
   >> Error detected within library code:
   inconsistent equation
protected-symbol-warn called with (NIL)
(83) -> q(x=x)
   >> Error detected within library code:
   equation is always satisfied
protected-symbol-warn called with (NIL)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.