বেসিক ক্যালকুলেটর


20

ক্যালকুলেটরে প্রবেশ করা একটি স্ট্রিং মূল্যায়ন করতে আপনাকে অবশ্যই একটি প্রোগ্রাম লিখতে হবে।

প্রোগ্রামটি অবশ্যই ইনপুট গ্রহণ করবে এবং সঠিক উত্তর আউটপুট করবে। যে ভাষাগুলির স্ট্যান্ডার্ড ইনপুট / আউটপুট ফাংশন নেই, আপনি ফাংশন ধরে নিতে পারেন readLineএবং print

আবশ্যকতা

  • কোনও ধরণের "eval" ফাংশন ব্যবহার করে না
  • ভাসমান পয়েন্ট এবং negativeণাত্মক সংখ্যাগুলি পরিচালনা করতে পারে
  • কমপক্ষে +, -, *, এবং / অপারেটরদের সমর্থন করে
  • অপারেটর এবং সংখ্যাগুলির মধ্যে এক বা একাধিক স্পেস যুক্ত ইনপুট পরিচালনা করতে পারে
  • বাম থেকে ডানে এক্সপ্রেশনকে মূল্যায়ন করে

প্রোগ্রামটি যে সবচেয়ে সংক্ষিপ্ততম জিতেছে। টাই হওয়ার সময় প্রথম যে প্রোগ্রামটি জমা দেওয়া হয়েছিল তা জয়ী হয়।

আপনি ধরে নিতে পারেন যে ইনপুটটি বৈধ এবং সঠিক ফর্ম্যাটটি অনুসরণ করে

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

ইনপুট

-4 + 5

আউটপুট

1


ইনপুট

-7.5 / 2.5

আউটপুট

-3


ইনপুট

-2 + 6 / 2 * 8 - 1 / 2.5 - 18

আউটপুট

-12

আমার ক্যালকুলেটর পোস্টফিক্স ব্যবহার করে । প্রতিযোগিতার জন্য স্ট্যাক ওভারফ্লোতে গাণিতিক প্রকাশগুলি মূল্যায়নও দেখুন (যদিও আমি নিয়মগুলি অভিন্ন কিনা তা আমি পরীক্ষা করে দেখিনি)।
dmckee

3
তৃতীয় পরীক্ষার কেসটি ভুল - আপনি ক্রিয়াকলাপের মান ক্রম অনুসরণ করুন বা সমস্ত ক্রিয়াকলাপ বাম থেকে ডানদিকে সম্পাদন করুন। দ্বিতীয় পরীক্ষার কেসটি দেখে আপনার ক্যালকুলেটরটি প্রতিটি অপারেশনের ফলাফলকে ঘিরে রাখে?
স্ট্যান্ড

দ্বিতীয় এবং তৃতীয় পরীক্ষার কেস স্থির করে ফলাফলটি গোল হয় না।
কেভিন ব্রাউন

তৃতীয় পরীক্ষার কেস অপারেশনের মানক আদেশ অনুসরণ করে না। আমাদের উত্তর অনুমিত হয়?
জন

1
কমান্ড লাইন আর্গুমেন্ট এআরজিভি ব্যবহার সম্পর্কে কী? কারণ শেলটি স্বয়ংক্রিয়ভাবে বিভক্ত হয়ে যুক্তিগুলি তালিকাভুক্ত করে।
মিং-টাং

উত্তর:


7

রুবি - 74 69 67 65 টি অক্ষর

a=0
("+ "+$<.read).split.each_slice 2{|b,c|a=a.send b,c.to_f}
p a

1
ব্যবহারের পরিবর্তে b[0],b[1].to_fআপনি এর |b|সাথে প্রতিস্থাপন |b,c|এবং ব্যবহার করতে পারেনb,c.to_f
নিমো 157

\ ও / ধন্যবাদ! :-)
আরনাউড লে ব্ল্যাঙ্ক

1
পরিবর্তে a.send(b,c.to_f), ব্যবহার করুন a.send b,c.to_f। এটি একটি চর সংরক্ষণ করে
বেনামে কাপুরুষতা

1
আপনি এর $<পরিবর্তে ব্যবহার করতে পারেনARGF
ডগবার্ট

9

বেফুঞ্জ - 37 x 5 = 185 38 x 3 = 114 টি অক্ষর

এটি পূর্ণসংখ্যার সংখ্যার মধ্যে সীমাবদ্ধ কারণ বেফুঞ্জের কোনও ভাসমান পয়েন্ট সমর্থন নেই।

&v      /& _ #`&# "-"$# -#<          v
 >~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
 ^      ># $ .# @#<              >&+ 

ব্যাখ্যা

বেফুঞ্জের বৃহত্তম বিশিষ্ট বৈশিষ্ট্যটি হ'ল বেশিরভাগ ভাষার মতো নির্দেশের রৈখিক সেট হওয়ার পরিবর্তে; এটি একক অক্ষর নির্দেশাবলীর একটি 2 ডি গ্রিড, যেখানে নিয়ন্ত্রণ যে কোনও দিকে প্রবাহিত হতে পারে।

প্রথমটি &কেবল প্রথম সংখ্যাটি ইনপুট করে। vএবং >তারপর দ্বিতীয় সারির মূল পথে পুনর্নির্দেশ নিয়ন্ত্রণ।

~:0`!#v_

এটি একটি অক্ষরকে ইনপুট করে ( ~), এটির সদৃশ করে ( :), শূন্যকে স্ট্যাকের উপর চাপায় ( 0), শীর্ষ দুটি উপাদানকে পপ করে এবং দ্বিতীয়টি প্রথমটির চেয়ে বড় কিনা তা নির্ধারণ করে ( ` আমি অবাক হয়েছি আপনি get `` ব্যবহার করতে পারবেন না কোড ব্যাকটিক। ), inverts শীর্ষ উপাদান (এর truthiness !), তারপর ডান যায় শূন্য হলে, নিচে অন্যথায় ( #v_)।

মূলত এটি খতিয়ে দেখছে যে ইনপুটটি আর -1কোনও ইনপুট উপস্থাপন করে না।

># $ .# @

যদি ইনপুটটি -1তখন ডুপ্লিকেট করা ইনপুট মানটি ফেলে দেওয়া হয় ( $), স্ট্যাকের শীর্ষটি আউটপুটটি ইন্টিজার ( .) হিসাবে হয় এবং প্রোগ্রামটি থামানো হয় ( @)।

:" "`! #v_

অন্যথায় ইনপুট কোনও জায়গার চেয়ে কম বা সমান কিনা তা নির্ধারণ করতে অনুরূপ প্রক্রিয়া পুনরাবৃত্তি করা হয়। যদি এটি কোনও স্থান হয় তবে নিয়ন্ত্রণ কমে যায়, অন্যথায় ডানদিকে ডানদিকে নিয়ন্ত্রণ করুন।

^      ># $ .# @#<

যদি এটি কোনও স্থান হয় তবে এটি বাম দিকে পুনঃনির্দেশিত ( <); প্রোগ্রাম হোল্ট ( @), আউটপুট ( .) এবং ডান পুনঃনির্দেশ ( >) সবগুলি ব্যবহার করে এড়িয়ে যায় #; স্ট্যাক থেকে স্থান অপসারণ করতে তবে বাতিল করা কার্যকর করা হয়। অবশেষে এটি পরবর্তী সম্পাদন ( ^) শুরু করার জন্য পুনর্নির্দেশ করা হয়েছে ।

:","`#^_

যদি একটি স্থান একই প্রক্রিয়া বিভক্ত করতে হলে হয় ব্যবহার করা হয় ছিল না [+, *]বা [-, \]অধিকার এবং আপ যথাক্রমে যাচ্ছে।

 >~                         "*"`#v_&*>
 ^                               >&+

কারণ [+, *]এটি আবার +বা এটি বিভক্ত কিনা তা নির্ধারণ করতে *। যদি +এটি নীচে নির্দেশিত হয় তবে পরবর্তী সংখ্যাটি ইনপুট ( &) এবং সেগুলি যুক্ত হয় ( +), নিয়ন্ত্রণটি তখন চারপাশে মোড়ানো হয় এবং পরবর্তী চরিত্রের জন্য মূল পথে সরে যায় । *তারপরে যদি এটি ইনপুট হয় ( &) এবং গুণিত হয় ( *) তবে সরাসরি চারপাশে মোড়ানো।

/& _ #`&# "-"$# -#<

জন্য [-, \]এটা সঠিক শিরোনাম শুরু ত্যাগ করেন। #'গুলি তাদের পরে চরিত্র লাফালাফি তাই প্রাথমিক পথ "-"`_যদি তা না হয় যা কেবল নির্ধারণ করে -বা /। যদি তা হয় /তবে এটি ইনপুট ( &) এবং ভাগ ( /) কে বামে চালিয়ে যায় । যদি এটি হয় -তবে এটি ডানদিকে &"-"$-চলেছে , আবার অক্ষরগুলি এড়িয়ে চলেছে যাতে এটি সম্পাদন করে যার ফলে সংখ্যাটি ইনপুট হয়ে যায় ( &) -অক্ষরটি স্ট্যাকের উপরে চাপানো হয় তবে ফেলে দেওয়া ( "-"$) এবং তার পরে বিয়োগটি গণনা করা হয় ( -)। এরপরে নিয়ন্ত্রণটি আবার মূল পথে ফিরে যায়।


6

পাইথন 3, 105 বাইট

চারটি বুনিয়াদি ক্রিয়াকলাপ পরিচালনা করে তবে প্রতিটি যুক্ত করতে ^বা যোগ করতে কেবল 5 টি অক্ষর লাগে %

f=float
x,*l=input().split()
while l:o,y,*l=l;x,y=f(x),f(y);x=[x+y,x-y,x*y,x/y]['+-*/'.find(o)]
print(x)

ক্রিয়াকলাপের অগ্রাধিকার বাম থেকে ডানদিকে।




5

টিসিএল 8.6, 57 48 টি অক্ষর।

  • যুক্তি থেকে ইনপুট:

    lm o\ b [las $argv a] {set a [exp $a$o$b]};pu $a
    
  • Stdin থেকে ( 64 53 )

    lm o\ b [las [ge stdin] a] {set a [exp $a$o$b]};pu $a
    

উভয় সমাধানের জন্য আপনাকে ইন্টারেক্টিভ শেলটি ব্যবহার করতে হবে।

আমি তালিকা হিসাবে ইনপুট চিকিত্সা প্রথম উপাদান গ্রহণ করা এবং এটা দায়িত্ব অর্পণ করা (Tcl বিভেদক হিসাবে শূণ্যস্থান ব্যবহার করে) a, তারপর আমি বাকি ওপর দিয়ে হেঁটে, 2 উপাদানের প্রতিটি সময়, অপারেটর এবং একটি দ্বিতীয় সংখ্যা গ্রহণ, উপর অপারেটর আবেদন $aএবং $bএবং দায়িত্ব অর্পণ ফলাফল a। শেষ পর্যন্ত ফলাফলটি a


আইডিয়ন কমপক্ষে স্ট্ডিনকে সমর্থন করে।
জোহানেস কুহন

অবশেষে আমি রুবিকে মারলাম। দুর্ভাগ্যবশত Idone Tcl 8.6 সমর্থন করে না, কিন্তু আমি ফলাফলের প্রয়োজন হবে না এর lmapতাই foreachএকটি ভাল প্রতিস্থাপন।
জোহানেস কুহান

4

হাস্কেল: 124 114 টি অক্ষর

j[o]=o
j(u:m:b:o)=j$show((case m of{"+"->(+);"-"->(-);"*"->(*);"/"->(/)})(read u)(read b)):o
main=interact$j.words

ভারি উত্তোলনের জন্য প্যাটার্ন ম্যাচিং এবং একটি সাধারণ কেস স্টেটমেন্ট ব্যবহার করে একটি বরং সরাসরি-ফরওয়ার্ড উত্তর answer ব্যবহার:

> ./calc <<< "123 - 12 + -12 / 12.124 * 9.99 - 1"
80.57456285054437

1
((case m of{..})(read u)(read b))আপনি লিখতে পারেন পরিবর্তে ((case m of{..}$read u)$read b), 2 অক্ষর কম।
সুইশ করুন

4

সি: 111 108 টি অক্ষর

main(c){float a,b;for(scanf("%f ",&a);~scanf("%c%f ",&c,&b);a=c^43?c%5?c%2?a/b:a*b:a-b:a+b);printf("%f",a);}

এটি সমস্ত প্রয়োজনীয়তা, ব্যবহার পূরণ করে:

> ./calc <<< "-43 - 56 + 14.123 / -13.22"
6.420348

1
~scanfপ্রতিস্থাপন করতে পারেন +1। এছাড়াও, c^45-> c%5এবং c^42-> এর c%2কাজ করা উচিত।
ugoren

@ এমডিএক্সএফ আমার মেশিনে নেই, এটি প্রতিটি পরীক্ষার ক্ষেত্রে এখানে পাস করে। আমি ক্ল্যাংয়ের সাথে মোটামুটি আধুনিক ইন্টেল ম্যাকবুকের সাথে সংকলন করছি এবং এটি দুর্দান্তভাবে ভালভাবে কাজ করে (আমি এখনই এটি আবার পরীক্ষা করে দেখলাম, আমি কোডটি এখানে থেকে কপিপেস্ট করেছি এবং কোনও পতাকা ছাড়াই এটি সংকলন করেছি)। আপনি কোন সংকলক, প্রসেসরের আর্কিটেকচার এবং ওএস ব্যবহার করছেন?
Fors

@ প্রথমত আমি বিশ্বাস করি আমার কাছে কিছু বিজোড় পতাকা ছিল যা অদ্ভুত আচরণকে প্ররোচিত করেছিল; আমার ভুল, এটা এখন আমার জন্য কাজ করছে। আপনাকে বিরক্ত করার জন্য দুঃখিত.
এমডি এক্সএফ

3

সি ++ 0 x 205 203 198 194 অক্ষর

#include<iostream>
#define P [](F l,F r){return l
int main(){typedef float F;F r,v,(*a[])(F,F)={P*r;},P+r;},0,P-r;},0,P/r;}};std::cin>>r;for(char o;std::cin>>o>>v;)r=a[o-42](r,v);std::cout<<r;}

সুন্দরভাবে ফর্ম্যাট করা:

#include<iostream>

int main()
{
    float r,v;
    float (*a[])(float,float)   ={  [](float l,float r){return l*r;},
                                    [](float l,float r){return l+r;},
                                    0,
                                    [](float l,float r){return l-r;},
                                    0,
                                    [](float l,float r){return l/r;}
                                 };

    std::cin>>r;
    for(char o;std::cin>>o>>v;)
        r=a[o-42](r,v);

    std::cout<<r;
}

3

পার্ল (97)

$b=shift;eval"\$b$r=$s"while($r=shift,$s=shift);print$b

তর্ক থেকে পড়া

$b=shift;$b=($r eq'+'?$b+$s:$r eq'-'?$b-$s:$r eq'*'?$b*$s:$b/$s)while($r=shift,$s=shift);print$b;

ইনপুট থেকে পড়ুন

@_=split/ /,<>;$b=shift@_;$b=($r eq'+'?$b+$s:$r eq'-'?$b-$s:$r eq'*'?$b*$s:$b/$s)while($r=shift@_,$s=shift@_);print$b

3

পোস্টস্ক্রিপ্ট (145)

আরেকটি পোস্টস্ক্রিপ্ট এন্ট্রি (পোস্টস্ক্রিপ্টের জন্য আকর্ষণীয় গল্ফগুলি খননের জন্য লুসার ড্রোগকে ধন্যবাদ!):

[/+{add}/-{sub}/*{mul}/{div}>>begin(%stdin)(r)file
999 string readline
pop{token not{exit}if
count 4 eq{3 1 roll
4 1 roll
cvx exec}if
exch}loop
=

আন golfed:

[/+{add}/-{sub}/*{mul}/ {div}>>begin
% Read the input
(%stdin)(r)file 999 string readline pop
{                        % .. string
  token not{exit}if      % .. string token
  % If we have 4 objects on the stack, we have two operands, one operator
  % and the input string. This means, we can calculate now.
  count 4 eq{            % a op string b
    % perform operation a op b = c (where op can be +,-,*,/)
    3 1 roll             % a b op string
    4 1 roll             % string a b op 
    cvx exec             % string c
  }if                    % string token (or c)
  exch                   % token string
}loop
=

আমাকে মারতে থাকো! +1 এটি খুব উত্তেজনাপূর্ণ।
luser droog

আপনি যদি আমার ক্রসওয়ার্ডটি মারতে পারেন তবে আমি আপনাকে একটি অনুগ্রহ দেব! এনবি পোস্টটি সিডব্লিউ হওয়ার আগে আপনি কেবলমাত্র 10 বার সম্পাদনা করতে পারবেন এবং ভোটগুলি আপনার পয়েন্ট পয়েন্ট অর্জন করবে না।
luser droog

আমি তোমাদের প্রহার কারণ আমি শুধুমাত্র বেশী বেছে নেওয়া হয়েছে রাখা যেখানে আমি করতে আপনাকে আঘাত ;-)। আমি ক্রসওয়ার্ড গ্রিড দিয়ে পারি কিনা তা নিশ্চিত নই। আমি চেষ্টা করব, তবে কয়েক সপ্তাহের মধ্যেই।
থমাস ডব্লিউ।

1
সম্প্রদায় উইকি এর অর্থ পোস্টটি এতবার সম্পাদিত হয়েছে এটি এখন সম্প্রদায়ের অন্তর্ভুক্ত। যে কোনও ব্যবহারকারী এটিকে সম্পাদন করতে পারেন (সাধারণ প্রস্তাবিত সম্পাদনার জন্য প্রয়োজনীয় সংস্থার অনুমোদনের বাইপাস রেখে ) এবং কোনও পয়েন্ট নেই। সুতরাং আপনি যা করেন না কেন, রেভ 9 এ থামান I আমি প্রায় এটি গিটার ট্যাবটিতে উড়িয়ে দিয়েছি।
লুসার droog

1
সমস্ত সিডব্লিউ গ্রিপিং উপেক্ষা করুন। তারা এটা স্থির!
luser droog

3

পাইথন - 308

import sys;i=sys.argv[1].split();o=[];s=[];a=o.append;b=s.pop;c=s.append
for t in i:
 if t in"+-*/":
  if s!=[]:a(b())
  c(t)
 else:a(t)
if s!=[]:a(b())
for t in o:
 if t=="+":c(b()+b())
 elif t=="-":m=b();c(b()-m)
 elif t=="*":c(b()*b())
 elif t=="/":m=b();c(b()/m)
 else:c(float(t))
print(b())

পঠনযোগ্য সংস্করণ:

# Infix expression calc

import sys

# Shunting-yard algorithm
input = sys.argv[1].split()
output = []
stack = []

for tkn in input:
    if tkn in "+-*/":
        while stack != []:
            output.append(stack.pop())
        stack.append(tkn)
    else:
        output.append(tkn)

while stack != []:
    output.append(stack.pop())

# Eval postfix notation
for tkn in output:
    if tkn == "+":
        stack.append(stack.pop() + stack.pop())
    elif tkn == "-":
        tmp = stack.pop()
        stack.append(stack.pop() - tmp)
    elif tkn == "*":
        stack.append(stack.pop() * stack.pop())
    elif tkn == "/":
        tmp = stack.pop()
        stack.append(stack.pop()/tmp)
    else:
        stack.append(float(tkn))

print(stack.pop())

কমান্ড-লাইন আর্গুমেন্ট হিসাবে স্ট্যান্ডার্ড আউটপুটে আউটপুট নেয়।


2

পোস্টস্ক্রিপ্ট (340)

/D<</+{add}/-{sub}/*{mul}/ {div}>>def/eval{/P null def{token not{exit}if exch/rem exch def
dup D exch known{/P load null ne{D/P load get exch/P exch def exec}{/P exch def}ifelse}if
rem}loop/P load null ne{D/P load get exec}if}def {(> )print flush{(%lineedit)(r)file
dup bytesavailable string readline pop eval == flush}stopped{quit}if}loop

এবং আরও কিছুটা পাঠযোগ্য:

%!
/oper<</+{add}/-{sub}/*{mul}/ {div}>>def

/eval{
    /op null def
    {
        token not {exit} if
        exch /rem exch def
        dup oper exch known {
            /op load null ne {
                oper /op load get
                exch /op exch def
                exec
            }{
                /op exch def
            } ifelse
        } if
        rem
    } loop
    /op load null ne { oper /op load get exec } if
} def

{
    (> )print flush
    {
    (%lineedit)(r)file
    dup bytesavailable string readline pop
    eval == flush
    } stopped { quit } if
} loop

2

জাভাস্ক্রিপ্ট (208 টি অক্ষর সংক্রামিত)

স্পষ্টতার জন্য, আমি এটি কমপ্যাক্ট করার আগে এই কোড (এটির জেএস-ফিডল ):

function math(match, leftDigit, operator, rightDigit, offset, string) {
    var L = parseFloat(leftDigit)
    var R = parseFloat(rightDigit)
    switch (operator)
    {
        case '*': return L*R;
        case '/': return L/R;
        case '+': return L+R;
        case '-': return L-R;
    }
};

str = prompt("Enter some math:", "-2 + 6 / 2 * 8 - 1 / 2.5 - 18").replace(/ /g, "");
var mathRegex = /(\-?\d+\.?\d*)([\*\/\+\-])(\-?\d+\.?\d*)/;
while(mathRegex.test(str)) {
    str = str.replace(mathRegex, math);
}
alert(str)

এখানে এটি 208 টি অক্ষরে কমপ্যাক্ট করা হয়েছে (এর জেএস-ফিডাল ):

function m(x,l,o,r){
    L=(f=parseFloat)(l);
    R=f(r);
    return o=='*'?L*R:o=='/'?L/R:o=='+'?L+R:L-R;
};

M=/(\-?\d+\.?\d*)([\*\/\+\-])(\-?\d+\.?\d*)/;
for(s=prompt().replace(/ /g, "");M.test(s);s=s.replace(M,m)){};
alert(s)

যেহেতু আমি আধা-কলোন দিয়ে রেখাগুলি শেষ করছি, সমস্ত অপসারণযোগ্য শ্বেতস্পেস অক্ষর গণনার জন্য উপেক্ষা করা হয়েছিল, তবে স্পষ্টতার জন্য রেখে গেছে।


2

হাস্কেল - 124

let p=let f[x]=Just$read x;f(x:o:r)=lookup o[("-",(-)),("+",(+)),("*",(*)),("/",(/))]<*>f r<*>Just(read x)in f.reverse.words

ফলাফলটি Maybeমোনাডে মুড়ে যাবে

λ: p"-2 + 6 / 2 * 8 - 1 / 2.5 - 18"
Just (-12.0)

এছাড়াও এটি <*>থেকে আমদানি করা প্রয়োজন Control.Applicative, তবে আমদানি কোডের বাইরেও করা যায়, তাই আমি আশা করি এটি অনুমোদিত।


2

সি শার্প (234) (231) (229) (223) (214)

class A{void Main(string[]s){var n=1;var o="";var r=0F;foreach(var t in s){if(n>0){var v=float.Parse(t);if(o=="")r=v;if(o=="+")r+=v;if(o=="-")r-=v;if(o=="*")r*=v;if(o=="/")r/=v;}o=t;n=-n;}System.Console.Write(r);}}

class A{
    void Main(string[] s)
    {
      var n = 1;
      var o = "";
      var r = 0F;

      foreach (var t in s)
      {
        if (n > 0)
        {
          var v = float.Parse(t);
          if (o == "") r = v;
          if (o == "+") r += v;
          if (o == "-") r -= v;
          if (o == "*") r *= v;
          if (o == "/") r /= v;
        }
        o = t;
        n = -n;
      }
      System.Console.Write(r);
    }
}

আমি '1 + 1' এর জন্য '0' পাচ্ছি। আইডিয়োন
রব

@ মাইক ইনপুটটি আর্গুমেন্ট হিসাবে নয়, স্টিডিন নয়।
জোহানেস কুহান


1

জাভা 11, 151 (ল্যাম্বদা ফাংশন হিসাবে)

s->{float r=0,t;int o=43,q;for(var x:s.split(" ")){if(x.length()>1|(q=x.charAt(0))>47){t=new Float(x);r=o<43?r*t:o<44?r+t:o<46?r-t:r/t;}o=q;}return r;}

লাম্বদা ফাংশন একটি স্ট্রিং ইনপুট নিচ্ছে এবং একটি ফ্লোট আউটপুট দেয়।

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

জাভা 11, 241 বাইট (I / O জিজ্ঞাসা করা সম্পূর্ণ প্রোগ্রাম হিসাবে)

interface M{static void main(String[]a){float r=0,t;int o=43,q;for(var x:new java.util.Scanner(System.in).nextLine().split(" ")){if(x.length()>1|(q=x.charAt(0))>47){t=new Float(x);r=o<43?r*t:o<44?r+t:o<46?r-t:r/t;}o=q;}System.out.print(r);}}

সম্পূর্ণ প্রোগ্রাম STDIN এর মাধ্যমে স্ট্রিং-লাইন গ্রহণ করে এবং STDOUT এ আউটপুট দেয়।

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

ব্যাখ্যা:

interface M{                  // Class
  static void main(String[]a){//  Mandatory main-method
    float r=0,                //   Result float, starting at 0
          t;                  //   Temp float
    int o=43,                 //   Operator flag, starting at '+'
        q;                    //   Temp operator flag
    for(var x:new java.util.Scanner(System.in)
                              //   Create an STDIN-reader
               .nextLine()    //   Get the user input
               .split(" ")){  //   Split it on spaces, and loop over it:
      if(x.length()>1         //    If the current String length is larger than 1
                              //    (work-around for negative values)
         |(q=x.charAt(0))>47){//    Or the first character is an operator
                              //    (and set `q` to this first character at the same time)
        t=new Float(x);       //     Convert the String to a float, and set it to `t`
        r=                    //     Change `r` to:
          o<43?               //      If `o` is a '*':
            r*t               //       Multiply `r` by `t`
          :o<44?              //      Else-if `o` is a '+':
            r+t               //       Add `r` and `t` together
          :o<46?              //      Else-if `o` is a '-':
            r-t               //       Subtract `t` from `r`
          :                   //      Else (`o` is a '/'):
            r/t;}             //       Divide `r` by `t`
      o=q;}                   //    And at the end of every iteration: set `o` to `q`
    System.out.print(r);}}    //    Print the result `r` to STDOUT

1

05 এ বি 1 ই , 30 বাইট

#ćs2ôívy`…+-*sk©i-ë®>i+ë®<i*ë/

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

#           # Split the (implicit) input-string by spaces
 ć          # Pop the list, and push the remainder and first item separated to the stack
  s         # Swap so the remainder is at the top of the stack
   2ô       # Split it into parts of size 2 (operator + number pairs)
     í      # Reverse each pair so the numbers are before the operators
v           # Loop over each of the pairs:
 y`         #  Push the number and operator separated to the stack
   …+-*     #  Push a string "+-*"
       sk   #  Get the index of the operator in this string
         ©  #  Store this index in the register (without popping)
   i        #  If the index is 1 (the "-"):
    -       #   Subtract the numbers from each other
   ë®>i     #  Else-if the index is 0 (the "+"):
       +    #   Add the numbers together
   ë®<i     #  Else-if the index is 2 (the "*"):
       *    #   Multiply the numbers with each other
   ë        #  Else (the index is -1, so "/"):
    /       #   Divide the numbers from each other
            # (and output the result implicitly)

যদি কোনও evalবিল্টিনের অনুমতি দেওয়া হয় তবে এটি বিকল্প পদ্ধতির ( 16 বাইট ) হতে পারে :

#ćs2ôJv…(ÿ)y«}.E

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

#ćs2ô    # Same as above
     J   # Join each operator+number pair together to a single string
v        # Loop over the operator+number strings:
 …(ÿ)    #  Surround the top of the stack in parenthesis
     y«  #  And append the operator+number string
}.E      # After the loop: evaluate the string using a Python-eval

এটি বিল্টিন ব্যবহার "-2 + 6 / 2 * 8 - 1 / 2.5 - 18"করার "((((((-2)+6)/2)*8)-1)/2.5)-18"আগে পরিবর্তিত হবে eval( .Eসরাসরি ব্যবহার করে অপারেটরটিকে */ওভারের অগ্রাধিকার দেবে +-, সুতরাং প্রথম বন্ধনীর সাথে রূপান্তর)।

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