গাণিতিক প্রকাশে `/` এবং `÷ between এর মধ্যে differenceতিহাসিক পার্থক্য


33

পরিচিতি:

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

এক আলোচনা যে ইতিমধ্যে অভিব্যক্তি সংক্রান্ত বহু বছর ধরে চলছে দ্বারা অনুপ্রাণিত 6÷2(1+ +2)

অভিব্যক্তি সঙ্গে 6÷2(1+ +2) , গণিতবিদ দ্রুত দেখতে হবে যে সঠিক উত্তর 1 , যেহেতু স্কুল থেকে একটি সহজ গণিত পটভূমি সঙ্গে মানুষের দ্রুত দেখতে হবে যে সঠিক উত্তর হল 9 । তাহলে এই বিতর্ক এবং তাই বিভিন্ন উত্তর কোথা থেকে আসে? 6÷2(1+ +2) কীভাবে লেখা হয় সে সম্পর্কে দুটি বিবাদবিরোধী নিয়ম রয়েছে । অংশের 2(কারণে একটি, এবং একটি বিভাগ প্রতীক কারণে ÷

যদিও গণিতবিদ এবং 'সাধারণ মানুষ' উভয়ই পেমডাস (প্যারেন্টেসিস - এক্সপোশনগুলি - বিভাগ / বহুগুণ - সংযোজন / বিয়োগ) ব্যবহার করবেন, তবে গণিতবিদদের জন্য ভাবটি নীচের মতই মূল্যায়ন করা হয়, কারণ 2(3) উদাহরণস্বরূপ 2এক্স2 মতো মনোমালিন্য ওরফে " সন্নিধি ক্ষেত্রে প্রযোজ্য গুণ কারণে একটি একক শব্দ " (এবং সেইজন্য অংশ Pমধ্যে PEMDAS), যা চেয়ে ভিন্নভাবে মূল্যায়ন করা হবে 2×(3) (ক দ্বিপদ ওরফে দুটি পদ):

6÷2(1+ +2)62(3)661

'সাধারণ মানুষের', জন্য যেখানে 2(3) এবং 2×(3) একই (এবং অংশ হবে MDমধ্যে PEMDAS,) তাই তারা এর পরিবর্তে ব্যবহার করব:

6÷2(1+ +2)6/2×(1+ +2)6/2×33×39

তবে, আমরা যদি 6÷2×(1+ +2) expression 2 × ( 1 + 2 ) হিসাবে মূল প্রকাশটি লিখতাম তবে বিভাগ প্রতীক ব্যবহারের কারণে এখনও কিছু বিতর্ক হতে পারে ÷। আধুনিক গণিতে, /এবং ÷প্রতীকগুলির ঠিক একই অর্থ রয়েছে: বিভাজন। কিছু নিয়ম প্রাক 1918 বিভাজন প্রতীক সংক্রান্ত ÷†† রাষ্ট্র এটি বিভাজন প্রতীক চেয়ে একটি ভিন্ন অর্থ ছিল /। এ কারণে যে ÷এর অর্থ "করার জন্য ব্যবহৃত ডান দিকে নম্বর / অভিব্যক্তি সঙ্গে বাম নম্বর / অভিব্যক্তি ভাগ " ††† । সুতরাং একটি÷ তখন, হবে(একটি)/() বাএকটি এখন। যে ক্ষেত্রে6÷2×(1+ +2)আগে 1918-এর পূর্বের লোকেরা এইভাবে মূল্যায়ন করবে:

6÷2×(1+ +2)62×(1+ +2)62×3661

†: যদিও আমি ÷অতীতে কীভাবে ব্যবহৃত হয়েছিল তা ব্যাখ্যা করার জন্য আমি একাধিক উত্স পেয়েছি (নীচে দেখুন), তবে 1918 এর আশেপাশে কোথাও এটি পরিবর্তিত হয়েছে তার যথাযথ প্রমাণ আমি পাইনি। তবে এই চ্যালেঞ্জের জন্য আমরা ধরে নিলাম 1918 ছিল বাঁক বিন্দু যেখানে ÷এবং /একই জিনিস যেখানে তারা অতীতে ভিন্ন মানে শুরু।

††: অন্য প্রতীক এছাড়াও বিভাগ-এর জন্য অতীতে ব্যবহার করা হয়েছে, মত :1633 সালে (এখনও হলণ্ড এবং অন্যান্য ইউরোপীয় অ ইংরেজিভাষী দেশে, বা পর এখন এই কি আমি ব্যক্তিগতভাবে প্রাথমিক বিদ্যালয় xD শিখেছি করেছি) অথবা )মধ্যে 1540 এর দশক। কিন্তু এই চ্যালেঞ্জ জন্য আমরা কেবল obelus প্রতীকের প্রাক 1918 অর্থ ফোকাস ÷
Sources: উত্স: সাধারণভাবে এই নিবন্ধ । এবং সম্পর্কিত 1918 পূর্বের নিয়মে ÷উল্লিখিত হয়েছে: এই আমেরিকান গণিত মাসিক নিবন্ধটি ফেব্রুয়ারী 1917 এর ; এই জার্মান টিউশচে বীজগণিত বইটি 1659 পৃষ্ঠা 9 এবং পৃষ্ঠা 76 ; এই বীজগণিত একটি প্রথম বইয়ের1895 পৃষ্ঠা 46 [48/189] থেকে

সামান্যভাবে অফ-টপিক: এই অভিব্যক্তিটি সম্পর্কে প্রকৃত আলোচনা সম্পর্কিত: এটি কখনই প্রথম স্থানে লেখা উচিত নয়! সঠিক উত্তরটি অপ্রাসঙ্গিক, যদি প্রশ্নটি অস্পষ্ট থাকে। * "ঘনিষ্ঠ কারণ এটি স্পষ্ট নয় কি আপনি বলছি" ক্লিকগুলি বোতাম *
এবং রেকর্ডের জন্য, এমনকি ক্যাসিও ক্যালকুলেটরগুলির বিভিন্ন সংস্করণও এই অভিব্যক্তিটি সঠিকভাবে মোকাবেলা করতে জানেন না:
এখানে চিত্র বর্ণনা লিখুন

চ্যালেঞ্জ:

আপনাকে দুটি ইনপুট দেওয়া হয়:

  • একটি (বৈধ) গাণিতিক প্রকাশটি কেবলমাত্র চিহ্নগুলির সমন্বয়ে 0123456789+-×/÷()
  • একটি বছর

আর তুমি আউটপুট গাণিতিক প্রকাশের ফলে বছরের উপর ভিত্তি করে (যেখানে ÷ভিন্নভাবে ব্যবহার করা হয় যখন YএকটিR<1918 , কিন্তু ঠিক একই ব্যবহার করা হয় /যখন YএকটিR1918 )।

চ্যালেঞ্জ বিধি:

  • আপনি গণিতের প্রকাশটি বৈধ বলে ধরে নিতে পারেন এবং কেবলমাত্র প্রতীক ব্যবহার করেন 0123456789+-×/÷()। এর অর্থ হ'ল আপনাকে ক্ষয়ক্ষতির মোকাবেলা করতে হবে না। (আপনাকে গল্ফিংয়ে সহায়তা করে বা যদি আপনার ভাষা কেবল এএসসিআইআই সমর্থন করে তবে আপনি ×বা ÷(যেমন *বা %) এর জন্য আলাদা আলাদা চিহ্ন ব্যবহার করার অনুমতিও পেয়েছেন ।)
  • আপনাকে যদি ইনপুট-এক্সপ্রেশনটিতে স্পেস-ডিলিমিটার যুক্ত করতে দেয় তবে এটি যদি (সম্ভবত ম্যানুয়াল) এক্সপ্রেশনটির মূল্যায়ণে সহায়তা করে।
  • I / O নমনীয়। ইনপুট একটি স্ট্রিং, অক্ষর-অ্যারে ইত্যাদির মতো হতে পারে ইত্যাদি বছরটি একটি পূর্ণসংখ্যা, তারিখ-অবজেক্ট, স্ট্রিং ইত্যাদি হিসাবে হতে পারে ইত্যাদি আউটপুট একটি দশমিক সংখ্যা হবে।
  • আপনি ধরে নিতে পারেন 0 পরীক্ষার ক্ষেত্রে কোনও বিভাজন হবে না।
  • আপনি ইনপুট প্রকাশ সংখ্যা অনুমান করতে পারেন অ নেতিবাচক হতে হবে (আপনি পার্থক্যকারী সাথে মোকাবিলা করতে হবে না, যাতে -হিসেবে নেতিবাচক প্রতীক বনাম -বিয়োগ প্রতীক হিসেবে)। আউটপুট তবে এখনও নেতিবাচক হতে পারে!
  • আপনি ধরে নিতে পারেন N(সর্বদা N×(পরিবর্তে লেখা হবে। আমরা কেবল এই চ্যালেঞ্জের /বিপরীতে বিভাগীয় চিহ্নগুলির দ্বিতীয় বিতর্ককে কেন্দ্র করব ÷
  • দশমিক আউটপুট-মানগুলির কমপক্ষে তিন দশমিক অঙ্কের স্পষ্টতা থাকা উচিত।
  • যদি ইনপুট-এক্সপ্রেশনটিতে y e a r < 1918 এর সাথে একাধিক ÷(অর্থাত্ 4÷2÷2 ) থাকে তবে সেগুলি এইভাবে মূল্যায়ন করা হয়: 4 ÷ 2 ÷ 2 4YএকটিR<19184÷2÷2422414। (অথবা ভাষায়:সংখ্যা4অভিব্যক্তি দ্বারা বিভক্ত করা হয়2÷2, যেখানে অভিব্যক্তি2÷2পালা মানে নম্বর2সংখ্যা দ্বারা ভাগ করা হয়েছে2।)
  • নোট করুন যে ÷উপায়টি সুস্পষ্টভাবে কাজ করে তার অর্থ এতে অপারেটরের প্রাধান্য রয়েছে ×এবং /(পরীক্ষার কেস 4÷2×2÷3 )।
  • আপনি ধরে নিতে পারেন ইনপুট-বছরটি [0000,9999]

সাধারাইওন রুল:

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

পরীক্ষার কেস:

Input-expression:   Input-year:   Output:      Expression interpretation with parenthesis:

6÷2×(1+2)           2018          9            (6/2)×(1+2)
6÷2×(1+2)           1917          1            6/(2×(1+2))
9+6÷3-3+15/3        2000          13           ((9+(6/3))-3)+(15/3)
9+6÷3-3+15/3        1800          3            (9+6)/((3-3)+(15/3))
4÷2÷2               1918          1            (4/2)/2
4÷2÷2               1900          4            4/(2/2)
(1÷6-3)×5÷2/2       2400          -3.541...    ((((1/6)-3)×5)/2)/2
(1÷6-3)×5÷2/2       1400          1.666...     ((1/(6-3))×5)/(2/2)
1×2÷5×5-15          2015          -13          (((1×2)/5)×5)-15
1×2÷5×5-15          1719          0.2          (1×2)/((5×5)-15)
10/2+3×7            1991          26           (10/2)+(3×7)
10/2+3×7            1911          26           (10/2)+(3×7)
10÷2+3×7            1991          26           (10/2)+(3×7)
10÷2+3×7            1911          0.434...     10/(2+(3×7))
4÷2+2÷2             2000          3            (4/2)+(2/2)
4÷2+2÷2             1900          2            4/((2+2)/2)
4÷2×2÷3             9999          1.333...     ((4/2)×2)/3
4÷2×2÷3             0000          3            4/((2×2)/3)
((10÷2)÷2)+3÷7      2000          2.928...     ((10/2)/2)+(3/7)
((10÷2)÷2)+3÷7      1900          0.785...     (((10/2)/2)+3)/7
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
                    1920          62           (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
                    1750          62           (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
10÷2/2+4            2000          6.5          ((10/2)/2)+4
10÷2/2+4            0100          2            10/((2/2)+4)
9+6÷3-3+15/3        9630          13           9+(6/3)-3+(15/3)
9+6÷3-3+15/3        0369          3            (9+6)/(3-3+(15/3))

উত্তর:


25

আর , 68 66 বাইট

function(x,y,`=`=`/`)eval(parse(t=`if`(y<1918,x,gsub('=','/',x))))

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

=পরিবর্তে ÷এবং *পরিবর্তে সাম্যের চিহ্ন প্রত্যাশা করে ×

কোডটি কিছু কদর্য অপারেটর ওভারলোডিং ব্যবহার করে, =ডান থেকে বাম অপারেটর হ'ল খুব কম অগ্রাধিকারের (যথাযথ আচরণ যা আমরা ১৯১৮-এর পূর্ব থেকেই চাই ÷) ব্যবহার করে এবং আর এর মূল নজিরটি ধরে রাখে ওভারলোড। বাকিগুলি স্বয়ংক্রিয়ভাবে আমাদের জন্য হয়ে যায় eval

বোনাস হিসাবে, এখানে একই সঠিক পদ্ধতির টিয়ার্স সিনট্যাক্সে প্রয়োগ করা হয়েছে। এবার আমাদের বিশেষ বিভাগ অপারেটর টিলড ( ~):

জুলিয়া 0.7 , 51 বাইট

~=/;f(x,y)=eval(parse(y<1918?x:replace(x,'~','/')))

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


3
`=`=`/`মায়াবী হয়! দুর্দান্ত সমাধান!
গ্রেগোর

uugugghhh আমি একই লাইনে চিন্তা ছিল। হায়রে, তুমি আমাকে এটাকে অনেক মারধর করেছ। অনলাইনে এটি ব্যবহার করে দেখুন
জিউসেপ্পে

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

6

জাভাস্ক্রিপ্ট (ES6),  130 129  120 বাইট

9 স্কটহ্যাম্পারকে ধন্যবাদ 9 বাইট সংরক্ষণ করা হয়েছে

হিসাবে ইনপুট লাগে (year)(expr)। প্রত্যাশা %এবং *পরিবর্তে ÷এবং ×

y=>g=e=>(e!=(e=e.replace(/\([^()]*\)/,h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))))?g:h)(e)

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

কিভাবে?

পাতার প্রকাশের প্রক্রিয়াজাতকরণ

সহায়ক ফাংশন একটি পাতার প্রকাশ আশা করে ইনপুট হিসাবে, %বছরের নিয়ম অনুসারে সমস্ত প্রতীক প্রক্রিয়া করেY (প্যারেন্ট স্কোপে সংজ্ঞায়িত) এবং ফলাফলের স্ট্রিংকে মূল্যায়ন করে।

যদি Y<1918আমরা রুপান্তর X%Yমধ্যে (X)/(Y), কম প্রাধান্য জোরদার এবং ডান-থেকে-বাম associativity জোরদার করা বাম থেকে ডানে থেকে সমগ্র স্ট্রিং এর জন্য এই প্রক্রিয়া পুনরাবৃত্তি করতে।

উদাহরণ:

  • 8%2হয়ে যায় (8)/(2), যার সরলীকৃত ফর্ম হয়8/2
  • 2+3%3+2 হয়ে (2+3)/(3+2)
  • 8%2%2হয়ে যায় (8)/((2)/(2)), যার সরলীকৃত ফর্ম হয়8/(2/2)

যদি Y1918, প্রতিটি %সহজভাবে একটি রূপান্তরিত হয় /

h = e =>                    // e = input string
  eval(                     // evaluate as JS code:
    e.split`%`              //   split e on '%'
    .reduceRight((a, c) =>  //   for each element 'c', starting from the right and
                            //   using 'a' as the accumulator:
      y < 1918 ?            //     if y is less than 1918:
        `(${c})/(${a})`     //       transform 'X%Y' into '(X)/(Y)'
      :                     //     else:
        c + '/' + a         //       just replace '%' with '/'
    )                       //   end of reduceRight()
  )                         // end of eval()

নেস্টেড মত প্রকাশের সাথে ডিল করা

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

এজন্য আমরা সহায়ক ফাংশনটি ব্যবহার করি এ জাতীয় পাতার প্রকাশগুলি পুনরাবৃত্তভাবে সনাক্ত এবং প্রক্রিয়া করতে।

g = e => (            // e = input
  e !=                // compare the current expression with
    ( e = e.replace(  // the updated expression where:
        /\([^()]*\)/, //   each leaf expression '(A)'
        h             //   is processed with h
      )               // end of replace()
    ) ?               // if the new expression is different from the original one:
      g               //   do a recursive call to g
    :                 // else:
      h               //   invoke h on the final string
)(e)                  // invoke either g(e) or h(e)

এখানে সেই h9 বাইটের সংক্ষিপ্ত সংস্করণ দেওয়া আছে :h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
স্কট হ্যাম্পার

পছন্দ করুন 'ডান থেকে বামে' একটি ঘণ্টা বাজানো উচিত ... তবে তা হয়নি।
আর্নৌল্ড

5

পাইথন 3.8 (প্রাক রিলিজ) , 324 310 306 বাইট

lambda s,y:eval((g(s*(y<1918))or s).replace('%','/'))
def g(s):
 if'%'not in s:return s
 l=r=j=J=i=s.find('%');x=y=0
 while j>-1and(x:=x+~-')('.find(s[j])%3-1)>-1:l=[l,j][x<1];j-=1
 while s[J:]and(y:=y+~-'()'.find(s[J])%3-1)>-1:r=[r,J+1][y<1];J+=1
 return g(s[:l]+'('+g(s[l:i])+')/('+g(s[i+1:r])+')'+s[r:])

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

%পরিবর্তে ÷এবং *পরিবর্তে নেয়×


1

পার্ল 5, 47 97 95 বাইট

/ /;$_="($`)";$'<1918?s-%-)/(-g:y-%-/-;$_=eval

$_="($F[0])";1while$F[1]<1918&&s-\([^()]+\)-local$_=$&;s,%,)/((,rg.")"x y,%,,-ee;y-%-/-;$_=eval

Tio


3
খুব সুন্দর ধারণা। তবে আপনার একটি সমস্যা রয়েছে 4%2%2যা উভয় ক্ষেত্রেই 1 প্রদান করে। (যদিও এটি 4 প্রাক-1918 এ ফিরে আসবে)
দাদা

এটি সত্য, আমি এই মুহুর্তের জন্য আর দেখতে
পাচ্ছি

1
@ দাদা, স্থির (+ 50 বাইটস)
নাহুয়েল ফুয়েলুল

1

মরিচা - 1066 860 783 755 740 বাইট

macro_rules! p{($x:expr)=>{$x.pop().unwrap()}}fn t(s:&str,n:i64)->f64{let (mut m,mut o)=(vec![],vec![]);let l=|v:&Vec<char>|*v.last().unwrap();let z=|s:&str|s.chars().nth(0).unwrap();let u=|c:char|->(i64,fn(f64,f64)->f64){match c{'÷'=>(if n<1918{-1}else{6},|x,y|y/x),'×'|'*'=>(4,|x,y|y*x),'-'=>(2,|x,y|y-x),'+'=>(2,|x,y|y+x),'/'=>(5,|x,y|y/x),_=>(0,|_,_|0.),}};macro_rules! c{($o:expr,$m:expr)=>{let x=(u(p!($o)).1)(p!($m),p!($m));$m.push(x);};};for k in s.split(" "){match z(k){'0'..='9'=>m.push(k.parse::<i64>().unwrap() as f64),'('=>o.push('('),')'=>{while l(&o)!='('{c!(o,m);}p!(o);}_=>{let j=u(z(k));while o.len()>0&&(u(l(&o)).0.abs()>=j.0.abs()){if j.0<0&&u(l(&o)).0<0{break;};c!(o,m);}o.push(z(k));}}}while o.len()>0{c!(o,m);}p!(m)}

মরিচায় 'ইভাল' এর মতো কিছু নেই তাই এটি কিছুটা শক্ত। মূলত, এটি একটি বোগ-স্ট্যান্ডার্ড জিস্কট্রা শান্টিং-ইয়ার্ড ইনফিক্স মূল্যায়নকারী যা একটি ছোটখাটো পরিবর্তন রয়েছে। ÷ একটি পরিবর্তনশীল অগ্রাধিকার সহ একটি অপারেটর: <1918 মোডে সমস্ত কিছুর চেয়ে কম (তবে প্রথম বন্ধনী),> = 1918 মোডের সমস্ত কিছুর চেয়ে বেশি। <1918 4 4 ÷ 2 ÷ 2 স্পেসিফিকেশন পূরণের জন্য এটি 'ডান রিলেটেড' (বা বাম? )ও রয়েছে এবং অ্যাসোসিয়েশনকে f অগ্রাধিকারটিকে নেতিবাচক করে 'নকল' করা হয়, তারপরে মূল্যায়নের সময় কোনও পূর্ববর্তী <0 সম্পর্কিত হিসাবে বিবেচনা করা হয়। গল্ফ করার আরও জায়গা আছে তবে এটি আমার মনে হয় একটি ভাল খসড়া।

Play.rust-lang.org এ অবরুদ্ধ


আপনার কি সত্যিই এতটা সাদা জায়গা দরকার? আমি মনে করি এর বেশিরভাগ অংশ সরিয়ে দেওয়া যেতে পারে।
ivzem

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