সাহায্য করুন! আমার ক্যালকুলেটর ভেঙে গেল! (পূর্ণসংখ্যার এক্সপ্রেশনটিকে ক্যালকুলেটর কীস্ট্রোকে পরিণত করুন)


30

ভূমিকা

সাহায্য করুন! আমি ঘটনাক্রমে আমার টিআই -৪৪ ক্যালকুলেটরটি আমার উইন্ডোটি বাইরে ফেলেছি (জিজ্ঞাসা করবেন না কীভাবে) এবং এটি ভেঙে যায়। আগামীকাল আমার কাছে একটি গণিত পরীক্ষা আছে এবং আমি এই বোতামগুলির সাথে একমাত্র ক্যালকুলেটর খুঁজে পেতে পারি:

7 8 9 +
4 5 6 -
1 2 3 *
0   = /

আমার গণিত পরীক্ষাটি এক্সপ্রেশন মূল্যায়নের উপর পর্যালোচনা পরীক্ষা। আমার একটি এক্সপ্রেশন নিতে যেমন একটি প্রোগ্রাম 1+(5*4)/7প্রয়োজন এবং এটিকে আমার অতিরিক্ত ক্যালকুলেটরে সমাধানের জন্য প্রয়োজনীয় কীস্ট্রোকগুলিতে রূপান্তর করি। (এবং আপনি যদি ভাবছিলেন তবে বাস্তবে আমার সাথে এটি ঘটেছে)।

চ্যালেঞ্জ

একটি খালি ইনপুট ধারণকারী স্ট্রিং প্রদত্ত শুধুমাত্র অক্ষর 0-9, (, ), +, -, *, এবং /, আউটপুট একটি স্থান বিভাজিত স্ট্রিং কীস্ট্রোকগুলি (যেমন। 1 + 3 / 3 =)। আউটপুট শেষে সর্বদা একটি সমান চিহ্ন থাকতে হবে। স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

উদাহরণ:

  • ইনপুট 1+(5*4)/7:, আউটপুট:5 * 4 / 7 + 1 =
  • ইনপুট 6*(2/3):, আউটপুট:2 / 3 * 6 =
  • ইনপুট (7-3)/2:, আউটপুট:7 - 3 / 2 =

এই চ্যালেঞ্জটিকে আরও সহজ করার জন্য:

  • আপনি ধরে নিতে পারেন যে ইনপুটটির সাথে এটির সাথে সংযুক্ত কীস্ট্রোকের একটি সিরিজ রয়েছে যার জন্য ক্যালকুলেটরটি সাফ করার প্রয়োজন 1-(7*3)হয় না ( এটি বৈধ নয় কারণ এটি আপনাকে সন্ধান করতে হবে 7 * 3, তারপরে ক্যালকুলেটরটি সাফ করুন 1 - 21the উপরের সমস্ত উদাহরণ বৈধ তাই যেহেতু একটি আছে , অবিচ্ছিন্ন আউটপুট যা ব্যবহারকারীর ক্যালকুলেটরটি সাফ করার প্রয়োজন হয় না এবং একটি সংখ্যা মনে রাখে)।
  • আপনি ধরে নিতে পারেন যে এ এর ​​পরে কেবল একটি একক পূর্ণসংখ্যা থাকবে /, যেমন কোনও ইনপুট যেমন 21/(7*3)প্রথম অনুমানটি পাস না করে having
  • আপনি ধরে নিতে পারেন যে সর্বদা *পূর্ণসংখ্যা এবং বাম বন্ধনীগুলির মধ্যে একটি সর্বদা থাকবে (বৈধ:, 6*(7)অবৈধ 6(7):)।
  • আপনি ধরে নিতে পারেন ইনপুটটি সর্বদা পূর্ণসংখ্যার আউটপুট উত্পাদন করে।
  • আপনি ধরে নিতে পারেন ইনপুটটিতে কেবল তিনটি স্তরের বন্ধনী রয়েছে।

অ উদাহরণ

  • 2-(14/2)যেমন আপনাকে যা করতে হবে হবে 14 / 2, তারপর পরিষ্কার , তারপর 2 - 7
  • 36/(2*3)যেমন আপনাকে যা করতে হবে হবে 2 * 3, তারপর পরিষ্কার , তারপর 36 / 6
  • 1024*4/(1*2+2)যেমন আপনাকে যা করতে হবে হবে 1*2+2, তারপর পরিষ্কার , তারপর 1024 * 4 / 4

বোনাসেস

  • -5% যদি আপনার প্রোগ্রামটি প্রথম বন্ধনীর গুণকে চিনতে পারে (এটি এটি জানেন 6(7)=6*(7))।
  • -5% (আপনার প্রোগ্রাম দশমিক সংখ্যার ইনপুট সব ব্যবস্থা করতে সক্ষম যদি 3.4, 2.75, 7.8) এবং আউটপুট অন্তর্ভুক্ত .(যেমন একটা হতে হবে .এই ক্ষেত্রে আমার অতিরিক্ত ক্যালকুলেটর কী)।
  • -5% যদি আপনার প্রোগ্রামটি সীমাহীন স্তরের বন্ধনীগুলির পরিচালনা করতে পারে।

এটি , বাইটের মধ্যে সংক্ষিপ্ততম কোড (বোনাস সহ) জয়!

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেম্পলেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

var QUESTION_ID=61751,OVERRIDE_USER=141697;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


আপনাকে প্রোগ্রাম চালানোর অনুমতি দেওয়া হয়েছে কিন্তু প্রকৃত সমীকরণ চালানোর জন্য সেগুলি ব্যবহার করতে পারবেন না? 0.o
ডাউনওয়েট

6
@ Vɪʜᴀɴ আপনার আমার গণিত শিক্ষককে জিজ্ঞাসা করতে হবে, আমি এটি বুঝতে পারি না।
GamrCorps

আমাদের কি অপারেশনের ক্রম পরিচালনা করতে হবে?
lirtosiast

1
দশ বা ততোধিক ক্রিয়াকলাপ নিয়ে আমরা কি আরও দীর্ঘতর জটিল জটিল কেস পেতে পারি?
lirtosiast

1
একটি টাইপো আছে। টেক্সট বলার অপেক্ষা রাখে না যে 6(7)ঘটবে না, এটি বলছে যে চিহ্ন ?মধ্যে 6?(7)সবসময় একটি হতে হবে *
wizzwizz4

উত্তর:


11

পাইথন 3. 337 327 - 10% = 295 বাইট

ভাসমান-পয়েন্ট এবং সীমাহীন স্তরের বন্ধনী সমর্থন করে, তাই বোনাস -10% এর জন্য যোগ্যতা অর্জন করে

import re
def v(s):
 if s[:1]=='(':l,s=e(s[1:]);return l,s[1:]
 m=re.match(r"\d+\.?\d*|\.\d+",s)
 if m:return[m.group()],s[m.end():]
def b(s,f,*O):
 l,s=f(s)
 while s[:1]in O:
  o=s[0]
  r,s=f(s[1:])
  if len(r)>1:l,r=r,l
  l+=[o]+r
 return l,s
m=lambda s:b(s,v,'*','/')
e=lambda s:b(s,m,'+','-')
print(' '.join(e(input())[0]))


5
@ সিসেরিক এটি কাজ করে, আপনাকে কেবল কমান্ড লাইন আর্গুমেন্ট ব্যবহার করতে হবে। আইডিয়োনের কাজগুলির sys.argv[1]সাথে প্রতিস্থাপন করা input()(এবং শ্যুটার - ইঙ্গিতের ইঙ্গিত)
গ্যামারকর্পস ২

কোথাও এমন কোনও গাইডলাইন রয়েছে যেগুলি জিনিসগুলিকে পরিষ্কার করে তোলে যেমন ইনপুটটি পড়া উচিত বলে মনে করা হয়, তর্ক হিসাবে দেওয়া হয়নি? (বিটিডব্লু @ গ্যামার কর্পস আপনার অর্থ কাঁচা_পিন্ট (), যা কেবলমাত্র আমার চারটি অক্ষর বাঁচাতে পারে: "সাইস,"।) শেষ কয়েকটি চরিত্রের শেভ না করার জন্য, আমি সত্যিই বলটি ঘূর্ণায়মান এবং অন্যান্য লোকের সমাধানগুলি দেখতে চেয়েছিলাম, বিশেষত যদি তারা পুনরাবৃত্ত-বংশদ্ভুতের চেয়ে আকর্ষণীয় কিছু করে।
mjmt

কম্যান্ড-লাইন args, ইনপুট (), ইত্যাদি @mjmt ইনপুট কোন পদ্ধতিতে গ্রহণ করা যেতে পারে
GamrCorps

1
@mjmt GamrCorps মানে input()কারণ এটি পাইথন 3! পাইথন 2 এর raw_input() ===পাইথন 3 এর input()!
wizzwizz4

8

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

ফিটিং তবে অনুপযুক্ত ভাষার অধীনে লিরটোসিয়াস্টের টিআই-বেসিক অনুগ্রহের জন্য উপযুক্ত ।

সমস্ত 3 বোনাসের জন্য যোগ্যতা অর্জন করে 712 - 15% = 605.2,। এখানে এবং সেখানে কিছু গল্ফিংয়ের সুযোগ রয়েছে তবে আমি প্রথমে এটি বের করতে চেয়েছিলাম, কারণ কিছু সম্ভাব্য গল্ফ অল্প-তুচ্ছ are দয়া করে নোট করুন যে টিআই-বেসিক একটি টোকেনাইজড ভাষা এবং নীচে সেই প্রোগ্রামটির একটি পাঠ্য উপস্থাপনা is সুতরাং, প্রোগ্রাম না বাইট 1182, যেহেতু এই প্রোগ্রাম হল UTF-8 অধীনে এনকোড করা হয় না। লক্ষ্য করুন ~ইউনারী অস্বীকৃতি প্রয়োজন এবং সমতূল্য ->থেকে STO>অপারেটর। আউটপুট একটি স্ট্রিং, থেকে Ansবা পুনরুদ্ধারযোগ্য Str1

নীচের প্রোগ্রামটি কয়েক সপ্তাহের মধ্যে ছড়িয়ে থাকা কয়েক প্রোগ্রামার চিন্তাভাবনা এবং প্রোগ্রামিংয়ের ফলাফল।

Input "",Str1
0->dim(L1
0->dim(L2
1->I
DelVar S
While I<length(Str1
DelVar T
".->Str3
1->C
While C and I<length(Str1
sub(Str1,I,1->Str2
inString("0123456789.",Str2->C
If C:Then
I+1->I
1->T
Str3+Str2->Str3
End
End
If T=0:Str3+Str2->Str3
sub(Str3,2,length(Str3)-1->Str3
If T=1:Then
expr(Str3->L2(1+dim(L2
End
inString("*+/-",Str3->M
If M:Then
I+1->I
2->T
1->C
While C
dim(L1->C
If C:Then
2fPart(L1(dim(L1))/2)>2fPart(M/2->C
If C:Then
~L1(dim(L1->L2(1+dim(L2
dim(L1)-1->dim(L1
End
End
End
M->L1(1+dim(L1
End
If Str3="(":Then
If S=1:Then
sub(Str1,1,I-1)+"*"+sub(Str1,I,length(Str1)-I+1)->Str1
Else
I+1->I
0->L1(dim(L1)+1
End
End
If Str3=")":Then
I+1->I
While L1(dim(L1
~L1(dim(L1->L2(1+dim(L2
dim(L1)-1->dim(L1
End
dim(L1)-1->dim(L1
End
T->S
End
augment(L2,-seq(L1(X),X,dim(L1),1,-1)->L2
0->dim(L1
1->C
{0,1->L3
For(I,1,dim(L2
L2(I->M
If M>=0:Then
M->L1(dim(L1)+1
Else
If C:Then
L1(dim(L1)-1
Goto S
Lbl A
Ans->Str1
L1(dim(L1->L1(dim(L1)-1
dim(L1)-1->dim(L1
0->C
End
Str1+" "+sub("*+/-",-M,1)+" ->Str1
L1(dim(L1
Goto S
Lbl B
Str1+Ans->Str1
dim(L1)-1->dim(L1
End
End
Goto F
Lbl S
L3Ans->L4
LinReg(ax+b) L3,L4,Y1
Equ►String(Y1,Str2
sub(Str2,1,length(Str2)-3
If C:Goto A
Goto B
Lbl F
Str1

সাধারণ ব্যাখ্যা

প্রোগ্রামটি বিকাশের সময় আমি যে কীটি নিয়ে কাজ করেছি তা এখানে রয়েছে:

Str1        The input string.
Str2        Counter variable (e.g. current character)
Str3        The current token being built.
L1          The operator stack
L2          The output queue
L3          Temporary list
L4          Temporary list
I           Iterator index
T           Type of token (enum)
S           Type of previous token (enum)
M           Temporary variable
C           Conditional variable


Token Types (T)
0           Undefined
1           Number
2           Operator
3           Open Parenthesis

Operator Elements
0           left parenthesis ("(")
1           multiplication ("*")
2           addition ("+")
3           division ("/")
4           subtraction ("-")
5           right parenthesis (")")

Precedence Rule: Remainder(prec, levelno)
0 - add, sub
1 - mul, div
(levelno = 2)

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

let Str1, Str2, Str3, L1, L2, I, S, T, M, C;

let error = (type, ...args) => {
    let message = "ERR:" + type + " (" + args.join("; ") + ")";
    throw new Error(message);
};

let isInteger = (n) => n == Math.floor(n);

let inString = (haystack, needle, start=1) => {
    if(start < 1 || !isInteger(start)) {
        error("DOMAIN", haystacak, needle, start);
    }
    let index = haystack.indexOf(needle, start - 1);
    return index + 1;
};

let sub = (string, start, length) => {
    if(start < 1 || length < 1 || !isInteger(start) || !isInteger(length)) {
        error("DOMAIN", string, start, length);
    }
    if(start + length > string.length + 1) {
        error("INVALID DIM", string, start, length);
    }
    return string.substr(start - 1, length);
}

let fPart = (value) => value - Math.floor(value);

// Input "", Str1
Str1 = process.argv[2];
// 0->dim(L1
L1 = [];
// 0->dim(L2
L2 = [];
// 1->I
I = 1;
// DelVar S
S = 0;
// While I<=length(Str1
while(I <= Str1.length) {
    // DelVar T
    T = 0;
    // Disp "Starting",I
    console.log("Starting, I =", I);

    // " read token
    // ".->Str3
    Str3 = ".";
    // 1->C
    C = 1;
    // While C and I<=length(Str1
    while(C && I <= Str1.length) {
        // sub(Str1,I,1->Str2
        Str2 = sub(Str1, I, 1);
        // inString("0123456789",Str2->C
        C = inString("0123456789", Str2);
        // If C:Then
        if(C) {
            // I+1->I
            I++;
            // 1->T
            T = 1;
            // Str3+Str2->Str3
            Str3 += Str2;
        }
    }
    // If T=0:
    if(T == 0) {
        // console.log("Huh?T=0?", Str3, Str2);
        // Str3+Str2->Str3
        Str3 += Str2;
    }

    // " remove placeholder character
    // sub(Str3,2,length(Str3)-1->Str3
    Str3 = sub(Str3, 2, Str3.length - 1);

    // " number
    // If T=1:Then
    if(T == 1) {
        // expr(Str3->L2(1+dim(L2
        L2[L2.length] = eval(Str3);
    }

    // Disp "Str3",Str3
    console.log("post processing, Str3 = \"" + Str3 + "\"");

    // inString("*+/-",Str3->M
    M = inString("*+/-", Str3);
    // " operator
    // If M:Then
    if(M) {
        // I+1->I
        I++;
        // 2->T
        T = 2;
        // Disp "op",M,dim(L1
        console.log("op", M, L1.length);
        // " parse previous operators
        // 1->C
        C = 1;
        // While C
        while(C) {
            // dim(L1->C
            C = L1.length;
            // If C:Then
            if(C) {
                // 2fPart(L1(dim(L1))/2)>2fPart(M/2->C
                C = 2 * fPart(L1[L1.length - 1] / 2) > 2 * fPart(M / 2);
                // If C:Then
                if(C) {
                    // ~L1(dim(L1->L2(1+dim(L2
                    L2[L2.length] = -L1[L1.length - 1];
                    // dim(L1)-1->dim(L1
                    L1.length--;
                }
            }
        }
        // " push current operator
        // M->L1(1+dim(L1
        L1[L1.length] = M;
    }
    // If Str3="(":Then
    if(Str3 == "(") {
        // 3->T
        T = 3;
        // If S=1:Then
        if(S == 1) {
            // sub(Str1,1,I-1)+"*"+sub(Str1,I,length(Str1)-I+1)->Str1
            Str1 = sub(Str1, 1, I - 1) + "*" + sub(Str1, I, Str1.length - I + 1);
        }
        // Else
        else {
            // I+1->I
            I++;
            // 0->L1(dim(L1)+1
            L1[L1.length] = 0;
        }
        // End
    }
    // If Str3=")":Then
    if(Str3 == ")") {
        // I+1->I
        I++;
        // While L1(dim(L1
        while(L1[L1.length - 1]) {
            // ~L1(dim(L1->L2(1+dim(L2
            L2[L2.length] = -L1[L1.length - 1];
            // dim(L1)-1->dim(L1
            L1.length--;
        }
        // End
        // dim(L1)-1->dim(L1
        L1.length--;
    }
    // Disp "Ending",I
    console.log("Ending", I);
    // T->S
    S = T;
    // Pause
    console.log("-".repeat(40));
}

// augment(L2,-seq(L1(X),X,dim(L1),1,-1)->L2
L2 = L2.concat(L1.map(e => -e).reverse());

// Disp L1, L2
console.log("L1", L1);
console.log("..", "[ " + L1.map(e=>"*+/-"[e-1]).join`, ` + " ]");
console.log("L2", L2);
console.log("..", "[ " + L2.map(e=>e<0?"*+/-"[~e]:e).join`, ` + " ]");

// post-processing
let res = "";
// 0->dim(L1
L1.length = 0;
// 1->C
C = 1;
// For(I,1,dim(L2
for(I = 1; I <= L2.length; I++) {
    // L2(I->M
    M = L2[I - 1];
    // If M>=0:Then
    if(M >= 0) {
        // M->L1(dim(L1)+1
        L1[L1.length] = M;
    }
    // Else
    else {
        // If C:Then
        if(C) {
            // L1(dim(L1)-1
            // Goto ST
            // Lbl A0
            // Ans->Str1
            res += L1[L1.length - 2];
            // L1(dim(L1->L1(dim(L1)-1
            L1[L1.length - 2] = L1[L1.length - 1];
            // dim(L1)-1->dim(L1
            L1.length--;
            // 0->C
            C = 0;
        }
        // End
        // Str1+" "+sub("*+/-",-M,1)+" ->Str1
        res += " " + "*+/-"[-M - 1] + " ";
        // L1(dim(L1
        // Goto ST
        // Lbl A1
        // Str1+Ans->Str1
        res += L1[L1.length - 1];
        // dim(L1)-1->dim(L1
        L1.length--;
    }
}
// Goto EF
// Lbl ST
// L3Ans->L4
// LinReg(ax+b) L3,L4,Y1
// Equ►String(Y1,Str2
// sub(Str2,1,length(Str2)-3
// If C:Goto A0
// Goto A1
// Lbl EF
// Str1
console.log(res);

আমি গল্ফিংয়ের কাজটি নিশ্চিত হয়ে যাওয়ার পরে আমি আরও গভীর-বিশদ ব্যাখ্যা সরবরাহ করব, তবে এর মধ্যে, এটি কোডটির একটি কার্সারি বোঝার ক্ষেত্রে সহায়তা করতে পারে।


আপনি তাজা টিআই Input "",Str1 0->dim(L1 0->dim(L2 1->I DelVar SPrompt Str1:SetUpEditor :1->I
-৪৪

@ লিরিটোসিয়াসট টাটকা ক্যালকুলেটর সম্পর্কে ভাল কথা, আমি toStringনিজে সিই না থাকায় আমি অন্তর্ভুক্ত করতে চাইনি । আমি প্রোগ্রামটির বৈধতা নিশ্চিত করার জন্য অনুকরণটি যাচাই করব।
কনর ও'ব্রায়েন

7

জাভাস্ক্রিপ্ট (ES6), 535 - 80 (15% বোনাস) = 455 বাইট

f=z=>{a=[],i=0;c=n=>{while(n[M='match'](/\(/)){n=n[R='replace'](/\(([^()]+)\)/g,(q,p)=>{m=++i;a[m]=c(p);return'['+m+']'})}n=n[R](/(\](?=\[|[\d])|[\d](?=\[))/g,'$1*');n=n[R](/\[?[\d\.]+\]?[*/]\[?[\d\.]+\]?/g,q=>{a[++i]=q;return'['+i+']'});n=n[R](/([\d.]+)\+(\[[\d]+\])/g,'$2+$1');while(n[M](/\[/)){n=n[R](/(\[?[\d\.]+\]?)\*(\[?[\d\.]+\]?)/g,(q,p,r)=>{t=a[r[R](/[\[\]]/g,'')];return r[M](/\[/)?(t&&t[M](/\+|\-/)?(r+'*'+p):q):q});n=n[R](/\[(\d+)\]/g,(q,p)=>{return a[p]+(a[p][M](/\+|-/)?'=':'')})}return n};return c(z)[R](/./g,'$& ')+'='}

কোনও ন্যূনতম সমাধান নয় আমি নিশ্চিত, তবে বেশ সম্পূর্ণ, তিনটি বোনাসের জন্য অনুমতি দিচ্ছে। কিছু কিছু ক্ষেত্রে সমান কী একাধিক চাপ প্রয়োজন, তবে ক্যালকুলেটর সামগ্রীগুলি সাফ করার প্রয়োজন হয় না। (উদা। 3,5,6 এবং 7 টি ভাড়ায়)

কিছু পরীক্ষার সাথে জেএসফিডেলের সাথে লিঙ্ক করুন: https://jsfiddle.net/2v8rkysp/3/

ভাল পরিমাপের জন্য কয়েকটি মন্তব্য সহ এখানে কিছু উন্মুক্ত, আধা-অনাবৃত কোড রয়েছে।

function f(z) {
var a=[],i=0;
function c(n) {
    //// Tokenize parentheses groups recursively
    while (n.match(/\(/)) {
    n = n.replace(/\(([^()]+)\)/g, function(q,p) {
      m = ++i;
      a[m]=c(p);
      return '['+m+']';
    });
    }

    //// Allow implied multiplication with parentheses
    n = n.replace(/(\](?=\[|[\d])|[\d](?=\[))/g, '$1*');

    //// Tokenize mult/division
    n = n.replace(/\[?[\d\.]+\]?[*\/]\[?[\d\.]+\]?/g, function(q) {
      a[++i]=q;
      return '['+i+']';
    });

    //// Move addition tokens to the front
    n = n.replace(/([\d.]+)\+(\[[\d]+\])/g,'$2+$1');

    //// Detokenize
    while (n.match(/\[/)) {
        //// If a token includes addition or subtraction,
        ////   move it to the front of other tokens 
        n = n.replace(/(\[?[\d\.]+\]?)\*(\[?[\d\.]+\]?)/g,function(q,p,r) {
          t=a[r.replace(/[\[\]]/g,'')];
          return r.match(/\[/)?(t&&t.match(/\+|\-/)?(r+'*'+p):q):q;
        });
        //// If a token includes addition or subtraction,
        ////   add the equals keypress
        n = n.replace(/\[(\d+)\]/g, function(q,p) {
           return a[p]+(a[p].match(/\+|-/)?'=':'');
        });
    }
    return n;
}
//// Add spaces and final equals keypress
return c(z).replace(/./g, '$& ')+'=';
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.