সাধারণ পূর্ণসংখ্যা অপারেশন ক্যালকুলেটর


28

একটি সাধারণ পূর্ণসংখ্যা অপারেশন স্ক্রিপ্টযোগ্য ক্যালকুলেটর প্রয়োগ করুন।

ধারণা

সংগ্রহকারী 0 থেকে শুরু হয় এবং এটিতে ক্রিয়াকলাপ হয়। প্রোগ্রাম আউটপুট শেষে সঞ্চয়ের মান আউটপুট।

অপারেশনস:

  • +যোগ 1সঁচায়ক থেকে
  • -1সংগ্রহকারী থেকে বিয়োগ করে
  • * দ্বারা সংযোজককে গুণ করে 2
  • / দ্বারা সঞ্চালককে ভাগ করে 2

নমুনা লিপি

ইনপুট ++**--/আউটপুট দিতে হবে 3

উদাহরণ বাস্তবায়ন

def calc(s)
    i = 0
    s.chars.each do |o|
        case o
            when '+'
                i += 1
            when '-'
                i -= 1
            when '*'
                i *= 2
            when '/'
                i /= 2
        end
    end
    return i
end

বিধি

  • এটি , তাই বাইট জিততে সর্বনিম্ন উত্তর, তবে নির্বাচিত নয়।
  • সৃজনশীল বাস্তবায়ন উত্সাহিত হয়।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • আপনি স্টিডিন বা আর্গুমেন্টের মাধ্যমে প্রোগ্রামটি পান এবং আপনি উত্তরটি রিটার্ন মান বা স্টাডআউটের মাধ্যমে আউটপুট করতে পারেন।
  • আনন্দ কর.
  • বিভাগটি সংক্ষিপ্ত হয়ে যায় কারণ এটি পূর্ণসংখ্যা বিভাগ।
  • প্রোগ্রাম -/ফিরে -1

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

*///*-*+-+
-1
/*+/*+++/*///*/+-+//*+-+-/----*-*-+++*+**+/*--///+*-/+//*//-+++--++/-**--/+--/*-/+*//*+-*-*/*+*+/+*-
-17 
+++-+--/-*/---++/-+*-//+/++-*--+*+/*/*/++--++-+//++--*/***-*+++--+-*//-*/+*/+-*++**+--*/*//-*--**-/-*+**-/*-**/*+*-*/--+/+/+//-+*/---///+**////-*//+-+-/+--/**///*+//+++/+*++**++//**+**+-*/+/*/*++-/+**+--+*++++/-*-/*+--/++*/-++/-**++++/-/+/--*/-/+---**//*///-//*+-*----+//--/-/+*/-+++-+*-*+*+-/-//*-//+/*-+//+/+/*-/-/+//+**/-****/-**-//+/+-+/*-+*++*/-/++*/-//*--+*--/-+-+/+/**/-***+/-/++-++*+*-+*+*-+-//+/-++*+/*//*-+/+*/-+/-/*/-/-+*+**/*//*+/+---+*+++*+/+-**/-+-/+*---/-*+/-++*//*/-+-*+--**/-////*/--/*--//-**/*++*+/*+/-+/--**/*-+*+/+-*+*+--*///+-++/+//+*/-+/**--//*/+++/*+*////+-*-//--*+/*/-+**/*//+*+-//+--+*-+/-**-*/+//*+---*+//*/+**/*--/--+/*-*+*++--*+//+*+-++--+-*-*-+--**+/+*-/+*+-/---+-*+-+-/++/+*///*/*-+-*//-+-++/++/*/-++/**--+-////-//+/*//+**/*+-+/+/+///*+*///*-/+/*/-//-*-**//-/-+--+/-*--+-++**++//*--/*++--*-/-///-+/+//--+*//-**-/*-*/+*/-*-*//--++*//-*/++//+/-++-+-*/*-+++**-/-*++++**+-+++-+-***-+//+-/**-+/*+****-*+++*/-*-/***/-/*+/*****++*+/-/-**-+-*-*-++**/*+-/*-+*++-/+/-++*-/*-****-*
18773342

2
সুতরাং ... এটি কঠোরভাবে পূর্ণসংখ্যার নয়, যেহেতু /অ-পূর্ণসংখ্যা পাওয়া যায়।
কনর ও'ব্রায়েন

2
তারপরে আপনার এটি স্পষ্টভাবে নির্দিষ্ট করা উচিত।
কনর ও'ব্রায়েন

5
কি -/ফিরতে হবে?
ডেনিস

4
আমি সাহায্য করতে পারি না তবে খেয়াল করতে পারি যে মরিচা-ল্যাংয়ের হোম পৃষ্ঠায় প্রদর্শিত কোডের স্নিপেট এই চ্যালেঞ্জটি সমাধান করে।
Zwei

4
দয়া করে আরও পরীক্ষার কেস যুক্ত করুন।
মার্টিন ইন্ডার

উত্তর:


28

পাইথন 2, 48 বাইট

i=0
for c in input():exec"i=i%s2&-2"%c
print i/2

নেই +2, -2, *2, অথবা /2। এমনটি করে +2এবং -2বদলে +1এবং -1আমরা দ্বিগুণ ইউনিট কাজ করছি যাতে করে চূড়ান্ত আউটপুট চাহিদা আধলা করা হবে। ব্যতীত, মেঝে-বিভাগের /এখন 2 এর একাধিককে গোল করা দরকার, যা সম্পন্ন হয়েছে &-2


ইহা অসাধারণ! আপনি এটি নিজের পোস্ট করতে চান এই একটি CJam বন্দর বর্তমানে নেতৃস্থানীয় চ্যালেঞ্জ হবে: 0q{2\~-2&}/2/( 2\~evals দ্বিতীয় প্রতীক সঙ্গে অপারেটর 2, -2&, bitwise, এবং 2/হয় চূড়ান্ত বিভাজন দুই। q{...}/ইনপুট উপর একটি foreach এবং 0মাত্র প্রাথমিক হয় মান।)
মার্টিন ইন্ডার

আপনি এটি পোস্ট করতে পারেন, আমি সিজেম জানি না।
xnor

সত্যিই চালাক! ES6 এ পোর্ট করা এটি সহজেই আমার উত্তরকে ছাড়িয়ে যাবে
edc65

পাইথনের উজ্জ্বল ব্যবহার এ থেকে নতুন কিছু শিখেছি।
জ্যাকব্র365

12

হাস্কেল, 51 বাইট

x#'+'=x+1
x#'-'=x-1
x#'*'=x*2
x#_=div x 2 
foldl(#)0

ব্যবহারের উদাহরণ: foldl(#)0 $ "++**--/"-> 3


12

জেলি , 18 17 বাইট

‘

’

:2
Ḥ
O0;ṛĿ/

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

কিভাবে এটা কাজ করে

প্রথম ছয়টি লাইন 1 থেকে 6 অবধি সূচকের সাহায্যকারী সংযোগগুলি সংজ্ঞায়িত করে ; তারা বৃদ্ধি, কিছুই না, হ্রাস, কিছুই না, অর্ধেক (মেঝে) এবং ডাবল।

মূল লিঙ্ক - O0;ṛĿ/- ইনপুট অক্ষরগুলিকে তাদের কোড পয়েন্টগুলিতে ( O) রূপান্তর করে , 0 পয়েন্টের প্রাথমিক বিন্যাসে প্রারেন্ড করে (প্রাথমিক মান) 0;, তারপর উত্পন্ন অ্যারেটিকে নিম্নরূপে হ্রাস করে।

প্রাথমিক মান হ'ল অ্যারের প্রথম উপাদান, অর্থাত্ প্রেন্টেন্ডড 0 । দ্রুত লিঙ্কটি ṛĿঅ্যারের প্রতিটি নীচের উপাদানটির জন্য বলা হয়, বাম আর্গুমেন্ট হিসাবে সর্বশেষ রিটার্ন মান এবং বর্তমান উপাদানটিকে ডান হিসাবে হিসাবে। এটি তার সঠিক যুক্তিটি পরীক্ষা করে ( ) এবং সেই সূচকের সাথে লিঙ্কটি একাকীভাবে ( Ŀ) উপস্থাপন করে, এইভাবে পছন্দসই অপারেশন প্রয়োগ করে।


10
এটি সর্বাধিক নতুন লাইনের সাথে জেলি উত্তরটির মতো দেখায়
কনার ও'ব্রায়ান

10

পাইথন 2, 54 বাইট

i=0
for c in input():exec"i=i"+c+`~ord(c)%5%3`
print i

ইনপুটটি স্ট্রিং আক্ষরিক হিসাবে নেওয়া হয়। ~ord(c)%5%3অপারেটরগুলিকে সংশ্লিষ্ট ডান অপারেশনগুলিতে মানচিত্র করে।

পূর্বে, আমি ব্যবহার করেছি hash(c)%55%3যা পাইথনের বিভিন্ন সংস্করণের মধ্যে ধারাবাহিক ফলাফল দেয় না। এটি আমাকে অন্যান্য সূত্রগুলি অন্বেষণ করতে উত্সাহিত করেছিল।


কাজ করছে বলে মনে হচ্ছে না ...
ধ্বংসাত্মক লেবু

পাইথন 2 তে ডাবল মোডের হ্যাশের জন্য 55,3 এবং 65,4 দুটি সংক্ষিপ্ততম
জোনাথন অ্যালান

@ আবিষ্কারযোগ্য জলছবি আমার পক্ষে করেছেন: আদর্শ
জোনাথন অ্যালান

আমি hashপাইথনের সংস্করণটি নির্দিষ্ট বলে মনে করি - আদর্শটি ২. 2..১০ ব্যবহার করে যা [1, 1, 2, 2]চারটি ম্যাপিং হিসাবে দেয় , স্থানীয়ভাবে ২.7.১২-এ আমি পেয়েছি[2, 0, 1, 0]
Sp3000

1
এটি আইডিয়োনে কাজ করে তবে আমার কম্পিউটারে অজগর নয়। সম্ভবত সংস্করণ নির্ভর, কোন ক্ষেত্রে সংস্করণটি নোট করা উচিত: নিনজা: /
ধ্বংসাত্মক লেবু

10

সিলোস , 133 211 বাইট

:s
def : lbl G GOTO
readIO
i-46
if i a
i+2
if i b
i+2
if i c
i+1
if i d
G e
:a
G v
:p
a-1
a/2
G o
:v
a+1
if a p
a-1
j=a
j/2
k=j
k*2
k-a
a/2
if k t
G o
:t
a-1
:o
G s
:b
a-1
G s
:c
a+1
G s
:d
a*2
G s
:e
printInt a

অপারেটরের ASCII কোড নেয়।

পরীক্ষার ক্ষেত্রে এটি অনলাইনে ব্যবহার করে দেখুন:
-/
++**--/
*///*-*+-+


লোডলাইন গল্ফিয়ার?
রোহান ঝুনঝুনওয়ালা

ওপি স্পষ্ট করেছে; 0-এ নয়, -1-/ ফিরতে হবে ।
ডেনিস

@ ডেনিস ফিক্সড যদিও প্রচুর বাইট যুক্ত হয়েছে: /
betseg

9

টুরিং মেশিন - 23 রাজ্য (684 বাইট)

এখানে চেষ্টা করুন - permalink

0 * * r 0
0 _ . l 1
1 * * l 1
1 _ * l 2
2 * 0 r 3
3 _ * r 3
3 + _ l +
3 - _ l -
3 x _ l x
3 / _ l /
+ _ * l +
+ * * * 4
4 - * l 5
4 _ 1 r 6
4 0 1 l 7
4 1 0 l 4
- _ * l -
- * * * 5
5 - * l 4
5 _ * r 8
5 0 1 l 5
5 1 0 l 7
x * * l x
x 1 0 l 9
x 0 0 l a
9 _ 1 r 6
9 1 1 l 9
9 0 1 l a
a _ _ r 6
a 1 0 l 9
a 0 0 l a
/ _ * l /
/ * * l b
b * * l b
b _ * r c
c 0 0 r d
c 1 0 r e
d * * l 7 
d 0 0 r d
d 1 0 r e
e _ * l 7
e - * l 4
e 0 1 r d
e 1 1 r e
8 * * r 8
8 - _ r 3
8 _ - r 3
7 * * l 7
7 _ * r f
f 0 _ r f
f 1 * r 6
f * _ l g
g * 0 r 6
6 * * r 6
6 _ * r 3
3 . _ l h
h _ * l h
h - _ l i
h * * l halt
i * * l i
i _ - r halt

ইনপুটটিতে কোনও '*' থাকা উচিত নয় কারণ এটি টুরিং মেশিন কোডের একটি বিশেষ চরিত্র। পরিবর্তে 'x' ব্যবহার করুন। বাইনারি উত্তর আউটপুট।

আনবফসকেটেড কোড

init2 * * r init2
init2 _ . l init0
init0 * * l init0
init0 _ * l init1
init1 * 0 r readop
readop _ * r readop
readop + _ l +
readop - _ l -
readop x _ l x
readop / _ l /
+ _ * l +
+ * * * inc
inc - * l dec
inc _ 1 r return
inc 0 1 l zero
inc 1 0 l inc
- _ * l -
- * * * dec
dec - * l inc
dec _ * r neg
dec 0 1 l dec
dec 1 0 l zero
x * * l x
x 1 0 l x1
x 0 0 l x0
x1 _ 1 r return
x1 1 1 l x1
x1 0 1 l x0
x0 _ _ r return
x0 1 0 l x1
x0 0 0 l x0
/ _ * l /
/ * * l //
// * * l //
// _ * r div
div 0 0 r div0
div 1 0 r div1
div0 * * l zero 
div0 0 0 r div0
div0 1 0 r div1
div1 _ * l zero
div1 - * l inc
div1 0 1 r div0
div1 1 1 r div1
neg * * r neg
neg - _ r readop
neg _ - r readop
zero * * l zero
zero _ * r zero1
zero1 0 _ r zero1
zero1 1 * r return
zero1 * _ l zero2
zero2 * 0 r return
return * * r return
return _ * r readop
readop . _ l fin
fin _ * l fin
fin - _ l min
fin * * l halt
min * * l min
min _ - r halt

রাজ্যগুলির ব্যাখ্যা:

প্রারম্ভিককরণ:
এই রাজ্যগুলি প্রতিটি রানের শুরুতে একবার init2 দিয়ে শুরু করা হয়

  • init2: সমস্ত পথে ডানদিকে সরান এবং একটি '' রাখুন। সেই পথে টিএম জানে কখন থামবে। 'Init0' এ পরিবর্তন করুন।
  • init0: যতক্ষণ না মাথা একটি স্পেস পড়ে until তারপরে একটি কক্ষ বাম দিকে সরান। 'Init1' এ পরিবর্তন করুন।
  • init1: একটি শূন্য রাখুন এবং একটি ঘর ডানদিকে নিয়ে যান এবং 'রিডোপ' এ পরিবর্তন করুন।

পড়ার নির্দেশাবলী:
এই রাজ্যগুলি পুরো প্রোগ্রাম জুড়ে একাধিকবার পরিদর্শন করা হবে

  • রিডপ: এটি অপারেটর বা '' পড় না হওয়া পর্যন্ত সমস্ত পথে ডানদিকে সরায়। যদি এটি কোনও অপারেটরকে আঘাত করে তবে সংশ্লিষ্ট অবস্থায় পরিবর্তন করুন (+, -, এক্স, /)। যদি এটি একটি '।' হিট করে তবে 'ফাইন' এ পরিবর্তন করুন।

  • প্রত্যাবর্তন: চলমান মোট এবং অপারেটরগুলির মধ্যে শূন্য স্থানে মাথা ফেরায়। তারপরে 'রিডপ' এ পরিবর্তন হয়।

অপারেশনস:
এই অপারেশনগুলি প্রকৃত নোংরা কাজ করে

  • +: মাথাটি কোনও অদ্বিতীয় স্থানের অক্ষর না পড়া পর্যন্ত বাম দিকে সরান to এই চরিত্রটি যদি '-' হয় তবে বাম দিকে সরান এবং 'ডিস' এ পরিবর্তন করুন। অন্যথায় 'ইনক' এ পরিবর্তন করুন।

  • -: '+' এর অনুরূপ, যদি '-' এবং 'ডিস' অন্যথায় থাকে তবে 'ইনক' এ পরিবর্তন করা উচিত।

  • ইনক: মাথার নীচের অঙ্কটি যদি 0 (বা একটি সাদা জায়গা) হয় তবে এটি 1 এ পরিবর্তন করুন এবং 'শূন্য' তে পরিবর্তন করুন। অঙ্কটি যদি 1 হয় তবে এটিকে 0 এ পরিবর্তন করুন, তারপরে পরবর্তী অঙ্কে পুনরাবৃত্তি করুন।

  • ডেক: ইনক এর অনুরূপ, 1 টি 0 বাদে 0 হয়, 0 0 এ যায় এবং যদি মাথাটি একটি সাদা জায়গা পড়ে, 'নেগে' পরিবর্তন করুন।

  • x, x0, x1: এক নম্বর বামে বিটশিফ্ট। 'রিটার্ন' এ পরিবর্তন করুন।

  • /, //, Div, Div0, Div1: সমস্ত পথে সংখ্যার ডানদিকে সরান, তারপরে একটিকে ডানদিকে বিটশিট করুন। যদি কোনও '-' থাকে তবে 'ইনক' এ পরিবর্তন করুন। এটি নেতিবাচক সংখ্যাগুলি গোল করে সিমুলেট করে। অন্যথায় 'শূন্য' এ পরিবর্তন করুন

  • নেগ: সংখ্যার পরে একটি '-' রাখুন তারপরে 'রিডপ' এ পরিবর্তন করুন

  • শূন্য, শূন্য ১, শূন্য ২: শীর্ষস্থানীয় শূন্যগুলি সরান এবং 'রিডোপ' এ পরিবর্তন করুন

ক্লিনআপ: আউটপুট উপস্থাপনযোগ্য করে তোলে

  • ফাইন, মিনিট: প্রয়োজনে নম্বরটির সামনে '-' সরান। স্থগিত করা হবে।

1
এই কোডটি পড়ে খুব ভাল লাগছিল। তাই আমার দিনটি আলোকিত করার জন্য ধন্যবাদ।
জ্যাকব্র365

8

পার্ল 6 , 53  52 বাইট

{([Ro] %(<+ - * />Z=>*+1,*-1,* *2,*div 2){.comb})(0)}

{[Ro](%(<+ - * />Z=>*+1,*-1,*×2,*div 2){.comb})(0)}

ব্যাখ্যা:

# bare block lambda that has one implicit parameter 「$_」
{
  (
    # reduce the code refs using ring operator 「∘」 in reverse 「R」
    [R[o]]

      # produce a hash from:
      %(

        # list of pairs of "operator" to code ref
        # ( similar to 「'+' => { $^a + 1 }」 )

          # keys
          < + - * / >

        # keys and values joined using infix zip operator 「Z」
        # combined with the infix Pair constructor operator 「=>」
        Z[=>]

          # values (Whatever lambdas)
          * + 1,
          * - 1,
          * × 2, # same as 「* * 2」
          * div 2,

      ){

        # split the block's argument into chars
        # and use them as keys to the hash
        # which will result in a list of code refs
        .comb

      }

  # call composed code ref with 0
  )(0)
}

ব্যবহার:

my $input = '++**--/'
my $output = {[Ro](%(<+ - * />Z=>*+1,*-1,*×2,*div 2){.comb})(0)}.( $input );
say $output; # 3
say $output.^name; # Int


6

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

ধন্যবাদ হেঁয়ালি ফিক্সিংয়ে -/-bug!

16 বাইট যদি এটা বিভাজন পূর্ণসংখ্যা ছিলেন না, আর Î"+-*/""><·;"‡.V

Î…+-*"><·"‡'/"2÷":.V

ব্যাখ্যা:

Î                      # Push 0, which is our starting variable, and input
 …+-*                  # Push the string "+-*"
     "><·"             # Push the string "><·"
          ‡            # Transliterate. The following changes:
                           "+" -> ">"
                           "-" -> "<"
                           "*" -> "·"
           '/"2÷":     # Replace "/" by "2÷"
                  .V   # Evaluate the code as 05AB1E code...
                           '>' is increment by 1
                           '<' is decrement by 1
                           '·' is multiply by 2
                           '2÷' is integer divide by two
                       # Implicitly output the result

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


ওপি স্পষ্ট করেছে; 0-এ নয়, -1-/ ফিরতে হবে ।
ডেনিস

Byণাত্মক সংখ্যা বিভাগ ইস্যু Î…+-*"><·"‡'/"2÷":.Vএকই বাইট গণনা জন্য স্থির করা যেতে পারে ।
এমিগানা

@ ডেনিস সমস্যা সমাধান করেছেন।
আদনান

@ এমিগনা ধন্যবাদ :)
আদনান

5

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

k=>[...k].reduce((c,o)=>+{"+":c+1,"-":c-1,"*":c*2,"/":c/2|0}‌​[o],0)

নিলকে ধন্যবাদ পুরো 12 বাইট সংরক্ষণ!


দ্বিতীয়টি উত্তরটি আরও পঠনযোগ্য হবে যদি আপনি এগুলি সরান "c"+এবং লিখে "c+1 c-1 c*2 c/2|0".split
নীল

প্রথম উত্তরের জন্য, কেন লিখবেন না o=>c=[c+1,c-1,c*2,c/2|0]["+-*/".indexOf(o)], বা আমি মনে করি আপনি এরপরে আরও একটি বাইট ব্যবহার করে সংরক্ষণ করতে পারেন o=>c={"+":c+1,"-":c-1,"*":c*2,"/":c/2|0}[o]
নীল

k=>[...k].reduce((c,o)=>+{"+":c+1,"-":c-1,"*":c*2,"/":c/2|0}[o],0)এমনকি আরও ছোট হতে পারে, তবে আমি গণনা হারিয়ে ফেলেছি ...
নীল

@ নীল আহ, হ্যাঁ, আমি এটি সম্পর্কে ভুলে গেছি
ও'ব্রায়ান

1
আপনি একরকম }এবং এর মধ্যে শূন্য-প্রস্থের অক্ষর পেয়েছেন [o], সুতরাং এটি আসলে মাত্র 66 বাইট দীর্ঘ। এছাড়াও, ওপি স্পষ্ট করেছে; 0-এ নয়, -1-/ ফিরতে হবে ।
ডেনিস

5

রুবি, 48 44 42 + 1 = 43 বাইট

-nপতাকা জন্য +1 বাইট । STDIN এ ইনপুট নেয়।

i=0
gsub(/./){i=i.send$&,"+-"[$&]?1:2}
p i

এটি আইডিয়নে দেখুন ( $_যেহেতু আইডিয়োন কমান্ড লাইন পতাকা গ্রহণ করে না) ব্যবহার করুন: http://ideone.com/3udQ3H



4

পাইথন 2, 58 56 বাইট

-২ বাইটস @ লিনকে ধন্যবাদ

r=0
for c in input():exec'r=r'+c+`2-ord(c)%11%3`
print r

অক্ষরের ordinals +-*/হয় 43,45,42,47মডিউল 11 এই হল 10,1,9,3মডিউল 3 যারা 1,1,0,0, 2 কম সেই হয় 1,1,2,2পরিমাণ আমরা একে অপারেশন জন্য প্রয়োজন দান: r=r+1, r=r-1, r=r*2, এবংr=r/2


আগে:

r=0
for c in input():exec'r=r'+c+`(ord(c)%5==2)+1`
print r

কীভাবে 2-ord(c)%11%3?
লিন

@ লিন ওয়েল ঠিক আছে আমি যদি তা ঠিক থাকে? (তবে সত্যিই আপনি এটি পোস্ট করতে পারেন এমন একটি পরিবর্তন যথেষ্ট বলে মনে করেন)
জোনাথন অ্যালান

2
এগিয়ে যান :) ----
লিন

4

গণিত, 83 73 70 বাইট

@ মার্টিনএেন্ডারের কারণে 10 বাইট সংরক্ষণ করা হয়েছে ।

(#/*##2&@@#/.Thread[{"+","-","*","/"}->{#+1&,#-1&,2#&,⌊#/2⌋&}])@0&

বেনামে ফাংশন। ইনপুট হিসাবে অক্ষরের একটি তালিকা নেয় এবং আউটপুট হিসাবে একটি নম্বর প্রদান করে। গল্ফিং পরামর্শ স্বাগত জানাই।



4

সি #, 87 81 বাইট

int f(string s){int i=0;foreach(var c in s)i=c<43?i*2:c<46?i+44-c:i>>1;return i;}

Ungolfed:

int f(string s)
{
    int i = 0;

    foreach (var c in s)
        i = c < 43 ? i * 2
          : c < 46 ? i + 44 - c
          : i >> 1;

    return i;
}

ইনপুটটি বৈধ বলে ধরে নেওয়া হয়। দুটি দিয়ে বিভাজন ডান এক বিট স্থানান্তরিত দ্বারা সম্পন্ন করা হয়, কারণ নিয়মিত বিভাগ সর্বদা শূন্যের দিকে বৃত্তাকার, এবং বিট স্থানান্তর সবসময় বৃত্তাকার নিচে। বর্ধিত এবং হ্রাস জন্য ASCII কোড মধ্যে 1 দূরত্বের কুশলী ব্যবহার করতে +এবং -


নতুন সি # 6 সিনট্যাক্স এবং লিনকের সামগ্রিক পদ্ধতির জন্য কিছু ভালবাসা? int f(string s)=>s.Aggregate(0,(i,c)=>c<43?i*2:c<46?i+44-c:i>>1);(65 বাইট)
সিরিল গ্যান্ডন

@ স্যারিল গ্যান্ডন যতদূর আমি অবগত রয়েছি যে "সিস্টেম.লিনক ব্যবহার করে" অন্তর্ভুক্ত করতে হবে, এটি 19 দীর্ঘতর করা এবং এটি 84 বাইটে স্থাপন করা উচিত। যে কারণে আমি এটি করিনি।
সিফেও

4

জাভাস্ক্রিপ্ট (ES6), 57 বাইট (অ্যারে) / 60 বাইট (পূর্ণসংখ্যা)

সমস্ত মধ্যবর্তী ফলাফলের একটি অ্যারে ফিরিয়ে দেওয়া:

o=>[...o].map(c=>x=[x>>1,x+1,x*2,x-1][eval(2+c+3)&3],x=0)

উদাহরণস্বরূপ, আউটপুট "++**--/"হবে [1, 2, 4, 8, 7, 6, 3]

কেবল চূড়ান্ত ফলাফলটি ফেরত:

o=>[...o].reduce((x,c)=>[x>>1,x+1,x*2,x-1][eval(2+c+3)&3],0)

কিভাবে এটা কাজ করে

উভয় সমাধান একই ধারণা উপর ভিত্তি করে: নিখুঁত হ্যাশ ফাংশন ব্যবহার করে eval(2+c+3)&3বিভিন্ন অপারেটর অক্ষর ম্যাপ cমধ্যে [0, 3]

 operator | eval(2+c+3)  | eval(2+c+3)&3
----------+--------------+---------------
    +     |  2+3 = 5     |    5 & 3 = 1
    -     |  2-3 = -1    |   -1 & 3 = 3
    *     |  2*3 = 6     |    6 & 3 = 2
    /     |  2/3 ~= 0.67 | 0.67 & 3 = 0

3

জাভাস্ক্রিপ্ট (ES6), 57

a=>[...a].map(c=>a=c<'+'?a<<1:c<'-'?-~a:c<'/'?~-a:a>>1)|a

দ্রষ্টব্য: সংগ্রহকারীর প্রাথমিক মান হ'ল প্রোগ্রাম স্ট্রিং, বিট ক্রিয়াকলাপ (~, >>, <<, |) ব্যবহার করে এটি প্রথম ব্যবহারে 0 এ রূপান্তরিত হয়।

পার্শ্ব নোট হিসাবে, @ xnor এর চতুর উত্তর জাভাস্ক্রিপ্টে 40 পোর্ট করা হবে:

a=>[...a].map(c=>a=eval(~~a+c+2))&&a>>1

(যদি আপনি এটি পছন্দ করেন তবে তাকে ভোট দিন)

পরীক্ষা

f=a=>[...a].map(c=>a=c<'+'?a<<1:c<'-'?-~a:c<'/'?~-a:a>>1)|a

function update() {
  O.textContent = f(I.value);
}

update()
<input value='++**--/' id=I oninput='update()'><pre id=O></pre>


3

জাভা, 77 বাইট

int f(String s){return s.chars().reduce(0,(r,c)->c<43?r*2:c<46?r+44-c:r>>1);}

জাভা 8 টি স্ট্রিম ব্যবহার করে।


1
সুন্দর উত্তর, এবং সাইটে আপনাকে স্বাগতম! আমি জাভা সম্পর্কে কিছু জানি না, কিন্তু আপনি পরিবর্তন করতে পারেন r >> 1করতে r>>1এবং 2 বাইট সংরক্ষণ করবেন?
ডিজেএমসিএমহেম

আপনি একেবারে সঠিক, ধন্যবাদ @ ডিজেএমসিএমহেম
প্রিমোডেমাস

1
দুর্দান্ত, খুশী আমি সাহায্য করতে পারলাম! আরও একটি নোট, আমি 77 বাইট গণনা করছি। আপনি কি আপনার বাইট গণনায় নিউলাইনটি অন্তর্ভুক্ত করবেন? এটি প্রয়োজনীয় না হওয়ায় আপনি আরও একটি বাইট বন্ধ নিতে পারেন।
DJMcMayhem

আবার ঠিক করুন @ ডিজেএমসিমেহেম, স্পষ্টতই ডাব্লুসিটি নাল-টার্মিনেটিং বাইট বা অন্য কিছু গণনা করেছে ...
প্রিমোডেমাস

1
যেমন আপনি জাভা 8 ব্যবহার করছেন, কেন ল্যাম্বডা ব্যবহার করে ফাংশনটি সংজ্ঞায়িত করবেন না, s->s.chars().reduce(0,(r,c)->c<43?r*2:c<46?r+44-c:r>>1);এটি আপনাকে 56 বাইট দেবে
user902383

3

জিএনইউ সেড, 65 59 57 বাইট

সম্পাদনা: টবি স্পিডের মন্তব্যে 2 বাইট সংক্ষিপ্ত ধন্যবাদ thanks

s/[+-]/1&/g
s/*/2&/g
s:/:d0>@2&:g
s/.*/dc -e"0[1-]s@&p"/e

চালান:

sed -f simple_calculator.sed <<< "*///*-*+-+"

আউটপুট:

-1

sedস্ক্রিপ্টের জন্য ইনপুট দেয়ঃ dcশেষে শেল কল, আধুনিক ইনপুট গ্রহণ বিপরীত পোলিশ স্বরলিপি । বিভাগে, সংখ্যাটি negative ণাত্মক ( d0>) হলে, [1-]রেজিস্টারে সঞ্চিত হ্রাস আদেশটি কল করা হয় @। রূপান্তর উদাহরণ: + - * /-> 1+ 1- 2* d0>@2/


ডিসি করার জন্য আপনার আর্গুমেন্টের আশেপাশের উদ্ধৃতিগুলির দরকার নেই, যদি কোনও স্থান না থাকে এবং [1-]প্যাটার্নের সাথে মেলে না এমন কোনও ফাইল ...
টবি স্পিচ

আমার মনের মধ্যে @TobySpeight আমি মানে সুইচ sসঙ্গে S। আমি ভুলে গিয়েছিলাম যে এটি রেজিস্ট্রি স্ট্যাক প্রতিস্থাপন করে না, এটি আমার দিকে যা চেয়েছিল তার বিপরীত প্রভাব রেখে এটির দিকে ধাক্কা দেয় (যেহেতু আমি এটি প্রত্যেকটির জন্য ব্যবহার করেছি /)। উদ্ধৃতিগুলি এখনও প্রয়োজনীয় কারণ আপনার এতে /চিহ্ন রয়েছে যাতে স্ট্রিংটিকে ফাইলের পাথ হিসাবে ব্যাখ্যা করা যায় :) এর পরে স্থানটি সরিয়ে আমি 1 বাইট আরও শেভ করেছি -e
শৈশুমারা

1
ডিসি -eফাইলের নাম হিসাবে যুক্তির ব্যাখ্যা দেবে না , সুতরাং আপনার জন্য উদ্ধৃতিগুলির প্রয়োজন নেই /- চেষ্টা করে দেখুন! আমি মনে করি যে কোনও কোড-গল্ফের পক্ষে যুক্তিযুক্ত হওয়া যুক্তিযুক্ত যে বর্তমান ওয়ার্কিং ডিরেক্টরিতে কোনও ফাইল 01s@বা এর শুরুতে না থাকা উচিত 0-s@
টবি স্পিড

@TobySpeight ডান সম্পর্কে ছিল -eসংক্রান্ত /অবশ্য কোট এখনও প্রয়োজন হয় আমি এখন দেখেছি। >: একটি পুনঃচালনা অপারেটর আমি মনে করি যেমন শেল সরাসরি ব্যাখ্যা করা হয়, যেহেতু আমি এই ত্রুটিটি পেয়েছিলেনcannot create @2/d0: Directory nonexistent
seshoumara

আহ, হ্যাঁ, আমি বিবেচনা করি নি >। আপনার সর্বোপরি উক্তিগুলি দরকার। বিভ্রান্ত করার জন্য (চেষ্টা করার) জন্য ক্ষমা চাইছি! এবং, যদিও ব্যাকস্ল্যাশ যুক্ত করা একটি চরিত্রের মতো দেখায়, এটি s///প্রতিস্থাপনে দ্বিগুণ করা দরকার , সুতরাং কোনও লাভ নেই ...
টবি স্পাইট

3

পিএইচপি, 75 বাইট

এটি জার্গ হালসারম্যানের উত্তরের পরিবর্তিত সংস্করণ ব্যবহার করে ।

eval(preg_replace('~.~','$s=($s\0(2-ord("\0")%11%3))|0;',$argv[1]));echo$s;

এটি একটি সাধারণ নিয়মিত অভিব্যক্তি ( ~.~) ব্যবহার করে স্ট্রিং প্রতিস্থাপনের উপর ভারীভাবে নির্ভর করে ।

ভ্যারিয়েবলটি $sপ্রতিটি অক্ষরের জন্য নতুন মান দিয়ে পুনরায় বরাদ্দ করা হয়। শেষে, এটি ফলাফল আউটপুট করে।


দ্রষ্টব্য : এটি -rপতাকা ব্যবহার করে মৃত্যুদন্ড কার্যকর করার জন্য বোঝানো হয়েছে ।


এটি এখানে চেষ্টা করুন:

অথবা চেষ্টা করুন: http://sandbox.onlinephpfunifications.com/code/7d2adc2a500268c011222d8d953d9b837f2312aa

পার্থক্য:

  • পরিবর্তে echo$s, আমি ব্যবহার করছি sprintf($s)। উভয়ই সংখ্যায় একই ক্রিয়া সম্পাদন করে। যেহেতু এটি কেবল পরীক্ষার জন্য, এটি ঠিক আছে।
  • যদি কোনও পাস করা যুক্তি না থাকে তবে এটি চলবে যেন আপনি ++*+প্রথম যুক্তি হিসাবে পাস করেছেন যা প্রদর্শিত হবে 5

হ্যাঁ! eপরিবর্তক ফিরে! : ডি
টাইটাস

@ টিটাস আমি এটি পাই না। আপনি কি একটু বিস্তারিত বলতে পারেন?
ইসমাইল মিগুয়েল

সংস্করণ। এর আগে পিএইচপি-তে একটি প্যাটার্ন মডিফায়ারe ছিল, যা এটি দ্বারা প্রতিস্থাপিত হয়েছিল preg_replace_callbackএবং এতে আপত্তিজনক ব্যবহার করা যেতে পারে ... তবে এটি যথেষ্ট নয়।
তিতাস

@ টিটাস সেই প্যাটার্ন সংশোধকটি আউটপুটটি সত্যিকারের পিএইচপি কোড হবে এবং সিনট্যাক্সকে সঠিক রাখার চেষ্টা করার জন্য ব্যবহৃত হত। এটি এখানে, এটি ব্যবহার করে না, তবে প্রতিটি একক অক্ষরকে সিনট্যাক্স নির্বিশেষে নির্বাহের জন্য কোডের টুকরা দিয়ে প্রতিস্থাপন করুন। খারাপ ইনপুট গুরুতর সুরক্ষা সমস্যা সৃষ্টি করবে।
ইসমাইল মিগুয়েল

আমি জানি. তবে এটি সাদৃশ্যপূর্ণ।
তিতাস

2

ব্যাচ, 61 বাইট

@set n=
@for %%a in (%*)do @set/an=n%%a2^&-2
@cmd/cset/an/2

@ Xnor এর এক্সিল্যান্ট পাইথন উত্তরের অনুবাদ।



2

পিএইচপি, 104 102 82 বাইট

ইওল সহ প্রথম সংস্করণ:

$i=0;while($c<9999)eval('$i'.['+'=>'++','-'=>'--','*'=>'*=2','/'=>'>>=1'][$argv[1]{$c++}].';');echo$i;

টেরিনারি অপারেটরগুলির সাথে দ্বিতীয় সংস্করণ:

while($o=ord($argv[1]{$c++}))$i=$o<43?$i*2:($o<44?$i+1:($o<46?$i-1:$i>>1));echo$i;

কমান্ড লাইন থেকে প্রথম যুক্তি হিসাবে ইনপুট স্ট্রিং নেয়।

এই "কেবল" 10,000 অক্ষরের চেয়ে কম ইনপুট স্ট্রিংয়ের জন্য কাজ করে - যা প্রচুর পরিমাণে হওয়া উচিত। সমস্ত পরীক্ষার কেসের সাথে পরীক্ষিত, দুর্ভাগ্যক্রমে শুরুতে আরম্ভের সংরক্ষণ করতে পারে না।দ্বিতীয় সংস্করণ কোনও দৈর্ঘ্যের স্ট্রিং এবং সূচনা ছাড়াই কাজ করে। :-)

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

আপডেট

  1. সংক্ষেপিত 2 বাইট সংরক্ষিত $i=$i>>1করার $i>>=1পূর্ণসংখ্যা বিভাজন জন্য।
  2. টেরিনারি অপারেটরদের পক্ষে al

2

পাইথন 3, 98 66 60 বাইট

ধন্যবাদ টুক্কাক্স!

অন্যান্য উত্তরের মতো গোল্ফ নয়, তবে আমি তাদের সাথে চৌর্যবৃত্তি না করে প্রতিযোগিতা করতে পারি না can't

i=0
for c in input():i+=[1,-i//2,-1,i][ord(c)%23%4]
print(i)

এছাড়াও, আমার পাশাপাশি একটি পুনরাবৃত্ত ল্যাম্বদা দ্রবণও রয়েছে

73 67 বাইট (উন্নত!)

s=lambda x,z=0:s(x[1:],z+[1,-z//2,-1,z][ord(x[0])%23%4])if x else z

পদ্ধতিগত সংস্করণ থেকে আপনার রিকার্সিভ সমাধানের অংশ প্রয়োগ করে: 60 বাইট: i=0 for c in input():i+=[1,-i//2,-1,i][ord(c)%23%4] print(i)। (অবশ্যই সঠিকভাবে ফর্ম্যাট করা হয়নি)। এছাড়াও আমি মনে করি আপনার উল্লেখ করা উচিত যে আপনি পাইথন 3 ব্যবহার করছেন। পাইথন 2 এ input()মূল্যায়ন করবে int(raw_input())
ইয়াতসি

@ টুক্কাএক্স z = 0 এর জন্য কাজ করে না ( +-1 টি করে)
ধ্বংসাত্মক লেবু

ওহ হ্যাঁ, আমার ভুল
ইয়াতসি

1
দয়া করে পাইথন 3 শিরোনাম যুক্ত করুন।
ইয়াতসি

2

আর, 201 বাইট

Golfed

p=.Primitive;"-"="+"=function(x)p("+")(x,1);body(`-`)[[1]]=p("-");"*"="/"=function(x)p("*")(x,2);body(`/`)[[1]]=p("%/%");Reduce(function(f, ...)f(...),rev(mget(strsplit(scan(stdin(),""),"")[[1]])),0,T)

মন্তব্য

p = .Primitive                       # Redefine
"-" = "+" = function(x)p("+")(x,1)   # Define - and +
body(`-`)[[1]] = p("-")              # Change the body, what we do to save a byte
"*" = "/" = function(x)p("*")(x,2)   # Same as above
body(`/`)[[1]] = p("%/%")            # Same as above
Reduce(function(f, ...)f(...),       # Function wrapper to evaluate list of func.  
  rev(mget(strsplit(scan(stdin(),""),"")[[1]])), # Strsplit input into list of functions
  init = 0,                                      # Starting Arg = 1
  right = T)                                     # Right to left = True 

+, -, %অপারেটরগুলিকে পরিমার্জন করা কৌশল । স্ট্রিংটি বিভক্ত করুন এবং তারপরে স্ট্রাকটিকে একটি দীর্ঘ ক্রিয়াকলাপে ফাংশনগুলির তালিকা করুন, যা সংযোজককে খাওয়ানো হবে Reduce()'s

এটি আর গল্ফ করতে পারেনি। যদি কেউ b=body<-কাজ পেতে পারেন তবে কয়েক বাইট সঞ্চয়ী থাকতে পারে (প্রতিটি ফাংশন bপরে সংশোধন করুন "-"="+"="/"="*")। প্রাথমিকভাবে বিকল্পকে বিশ্লেষণ এবং বিশ্লেষণের চেষ্টা করা হয়েছিল, তবে ক্রিয়াকলাপ এবং প্রথম বন্ধনীটি ভয়াবহ ছিল।


এই এক বছর পর, কিন্তু আমি এটা আপনার পদ্ধতির একটি বিট সোয়াপিং দ্বারা 10 বাইট নামা পরিচালিত - আপনি মধ্যে স্থান সরিয়ে 8 বাইট ড্রপ করতে পারেন f, ...সংজ্ঞা Reduceফাংশন এবং পরিত্রাণ stdin()মধ্যে scanকিন্তু আমি শুধু একটি সরল চেষ্টা ফাংশনটি একটু আলাদাভাবে সংজ্ঞায়িত করে আরও দুটি বাইট ফেলেছে এমন পদ্ধতি approach tio.run/##XCvLCsMgEAXQrwnO6Gge29B/…
জিউসেপ

1

লেক্স + সি, 78 , 74 , 73 বাইট

প্রথম চরিত্রটি একটি স্থান।

 c;F(){yylex(c=0);return c;}
%%
\+ c++;
- c--;
\* c*=2;
\/ c=floor(c/2.);

থেকে পড়া stdin, ফলাফল ফলাফল।

lex golfed.l && cc lex.yy.c main.c -lm -lflপরীক্ষার প্রধান সহ সংকলন :

int main() { printf("%d\n", F()); }

1

জাভাস্ক্রিপ্ট (ইএস 5), 127 বাইট

function(b){for(a=c=0;a<b.length;++a)switch(b[a]){case"+":++c;break;case"-":--c;break;case"*":c*=2;break;case"/":c/=2}return c}

Ungolfed:

function c(a){
  c=0;
  for(var i=0;i<a.length;++i){
    switch(a[i]){
      case "+":++c;break;
      case "-":--c;break;
      case "*":c*=2;break;
      case "/":c/=2;break;
    }
  }
  return c;
}

1

পাইথ, 23 বাইট

FNQ=Z.v%".&%sZ2_2"N;/Z2

একটি সম্পূর্ণ প্রোগ্রাম যা স্ট্রিং হিসাবে ইনপুট নেয় এবং ফলাফল মুদ্রণ করে।

এটি @ xnor এর পাইথন উত্তরের একটি বন্দর ।

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

কিভাবে এটা কাজ করে

FNQ=Z.v%".&%sZ2_2"N;/Z2   Program. Input: Q. Z initialised as 0
FNQ                       For. For N in Q:
        ".&%sZ2_2"         String. Literal string ".&%sZ2_2"
       %          N        String format. Replace %s with the current operator N
           %sZ2            Operator. Yield Z*2, Z//2, Z+2, Z-2 as appropriate
         .&    _2          Bitwise and. Result of above & -2
     .v                    Evaluate. Yield the result of the expression
   =Z                      Assignment. Assign result of above to Z
                   ;      End. End for loop
                    /Z2   Integer division. Yield Z//2
                          Print. Print the above implicitly 

1
পাইথনকে পাইথ রূপান্তর করা বেশিরভাগ খারাপ ধারণা। u@[yGhG0tG0/G2)CHQ019 বাইট
জাকুব

@ জাকুব ধন্যবাদ - আমি পাইথের কাছে খুব নতুন, তাই কোনও পরামর্শই প্রশংসিত। পৃথক উত্তর হিসাবে পোস্ট করতে দ্বিধা বোধ করুন, যেহেতু এটি একটি ভিন্ন পদ্ধতির।
দ্য বাইকিংভিকিং

1

পিএইচপি, 79 বাইট

<?$i=0;switch($_POST['a']){case"+":$i+1;case"-":$i-1;case"/":$i/2;case"*":$i*2}

2
আপনার শিরোনামে বাইকাউন্ট অন্তর্ভুক্ত করুন, অদম্য স্থান সরিয়ে ফেলুন এবং 1-বর্ণের পরিবর্তনশীল নাম ব্যবহার করুন use
টুকসক্রাফটিং

এটা কি গল্ফড ?! :-D
ইয়েটিজিএনএন

@ TùxCräftîñg আমি এটি করেছি।
উইনি দি পোহ

আপনি বিভক্ত এবং দ্বারা গুণা 1; আপনাকে ভাগ করতে হবে এবং গুণ করতে হবে2
TuxCraftting

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