1 + 1 = 10, 1 + 2 = 3


26

বেস 10 এবং বেস 2 উভয়ই সাধারণ গাণিতিক (সংযোজন, বিয়োগ, গুণ এবং বিভাগ) করতে পারে তার চেয়ে একটি ফাংশন বা প্রোগ্রাম লিখুন।

ফাংশনটি ইনপুট হিসাবে গাণিতিক অভিব্যক্তি গ্রহণ করবে এবং সঠিক ফলাফলটিকে সঠিক ভিত্তিতে আউটপুট দেবে। ইনপুটটি nএক বা একাধিক অপারেটর ( + - * /) দ্বারা পৃথক করা হবে ।

যদি সমস্ত ইনপুট মানগুলিতে কেবল 0 এবং 1 থাকে তবে সমস্ত মান বাইনারি হিসাবে বিবেচিত হবে। যদি কমপক্ষে একটি ডিজিট হয় তবে 2-9সমস্ত মান 10 টি বেস বলে বিবেচিত হবে।

নিয়মাবলী:

  • আপনি ধরে নিতে পারেন যে সংখ্যার মধ্যে কেবল একটি অপারেটর থাকবে ( 10*-1প্রদর্শিত হবে না)
  • আপনি ধরে নিতে পারেন কোনও বন্ধনী থাকবে না।
  • সাধারণ অপারেটর অগ্রাধিকার (সন্দেহ থাকলে গুগল ক্যালকুলেটরে এক্সপ্রেশনটি ব্যবহার করে দেখুন)।
  • আপনি ধরে নিতে পারবেন না কেবলমাত্র পূর্ণসংখ্যা থাকবে
  • ইনপুট বা আউটপুটে কোনও শীর্ষস্থানীয় জিরো থাকবে না
  • আপনি ধরে নিতে পারেন কেবল বৈধ ইনপুট দেওয়া হবে
  • আপনি ধরে নিতে পারেন সমস্ত ইনপুট মানগুলি ইতিবাচক (তবে বিয়োগকারী অপারেটর নেতিবাচক আউটপুটটিকে সম্ভব করে তুলতে পারে 1-2=-1এবং 10-100=-10)
  • REPL গৃহীত হয় না
  • আপনি ইনপুট নিতে পৃথক আর্গুমেন্ট হিসাবে, অথবা একটি একক আর্গুমেন্ট হিসাবে পারবেন, কিন্তু ইনপুট হয়েছে সঠিক অনুক্রমে যাবে।
    • অর্থাত আপনি প্রতিনিধিত্ব করতে পারে 1-2ইনপুট আর্গুমেন্ট সহ 1, -, 2, কিন্তু না 1, 2, -
  • আপনাকে অবশ্যই ইনপুটটিতে প্রতীকগুলি গ্রহণ করতে হবে , ইত্যাদি + - * /নয় etc.plusminus
  • আপনাকে অবশ্যই ভাসমান পয়েন্টের মানগুলি সমর্থন করতে হবে (বা আপনার ভাষার সর্বাধিক সীমা পর্যন্ত, তবে কেবলমাত্র পূর্ণসংখ্যাকে সমর্থন করা হয় না)।
  • eval গৃহীত হয়

উদাহরণ:

1+1
10

1010+10-1
1011

102+10-1
111

1+2+3
6

10*10*10
1000

11*11*11
11011

10*11*12+1
1321

10.1*10.1
110.01

20.2*20.2
408.04

10/5
2

110/10
11

Also accepted (optional line or comma-separated input):
10
+
10
-
1
11    <-- This is the output

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।


ক্ষেত্রে 110/10, 11.0গ্রহণযোগ্য?
isaacg

@ আইস্যাকগ হ্যাঁ, এটি ঠিক আছে :-)
স্টিভি গ্রিফিন

5
ডাউনটা ... কেন?
স্টিভি গ্রিফিন

উত্তর:


5

জাপট, 77 72 62 60 62 * 60 59 51 বাইট

OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤

ব্যাখ্যা (কমবেশি জেএস উত্তরের মতো):

Ov                       //eval...
  Uf"[2-9]"              //if input contains the digits 2 to 9
    U:                   //then it's base 10, just compute
    Ur"[\\d.]+"          //otherwise replace all the numbers
    "º$&e14+P n2 /2pE¹"  //with their base 10 equivalents
                         //I.e., take every number, multiple by 10^14, convert to
                         //base 10 and divide by 2^14
                         // º and ¹ are multiple brackets
    ¤                    //means "s2", i.e. convert the result to binary

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


* সঠিকভাবে ভাগ হয়নি


5 দিন আগে হিসাবে , জেএস এর evalজন্য নিযুক্ত করা হয়েছে Ox। এটি আরও সংক্ষিপ্ত করা যায় কিনা তা আমি দেখব।
ETH প্রোডাকশনগুলি

@ ধন্যবাদ, এটি 5 বাইট সঞ্চয় করে।
নিকেল

আরও 5 টি বাইট সংরক্ষণ করা হয়েছে: OxUf"[2-9]" ?U:`({Ur"\\d+(\\.\\d+)?""(($&e14+P).n(2)/16384)"}).s(2)এটি সম্ভবত জেএসের পরিবর্তে জাপট কোড তৈরি করা সম্ভব হয়েছে, তারপরে Ovএটি মূল্যায়নের জন্য ব্যবহার করুন ।
ETH প্রোডাকশনগুলি

হ্যাঁ, 62 বাইট :) কারণ প্রয়োজনীয় transpiler সঙ্গে একটি স্ট্রিং জগাখিচুড়ি বেমানান প্রথম বন্ধনীOvUf"[2-9]" ?U:Ur"\\d+(\\.\\d+)?""~~[$&e14+P n2 /16384]" +" s2~~[...]
ETH প্রোডাকশনস

1
51:OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤
ইটিএইচ প্রোডাকশনগুলি

9

জাভাস্ক্রিপ্ট ES6, 87 97 1 100 2 106 3 102 101 98 100 4 93 88 86 বাইট

e=>eval(e.match`[2-9]`?e:`(${e.replace(/[\d.]+/g,"('0b'+$&e14)/16384")}).toString(2)`)

ডেমো + ব্যাখ্যা:

function c(e){
    return eval(                        
      e.match`[2-9]`?                  //check if there are numbers 2 to 9
        e:                             //if there're, just compute the result
        "("+                           
         e.replace(                    //otherwise replace...
           /[\d.]+/g,                  //any number...
           "(('0b'+$&e14)/16384)"    //...with itself converted to base 10
         )
        +").toString(2)"               //compute the result and convert it to binary
    )
}

document.write(
   c("1.1*1.1")+"<br>"+
   c("1010+10-1")+"<br>"+
   c("102+10-1")+"<br>"+
   c("1+2+3")+"<br>"+
   c("10*10*10")+"<br>"+
   c("11*11*11")+"<br>"+
   c("10*11*12+1")+"<br>"+
   c("10.1*10.1")+"<br>"+
   c("20.2*20.2")+"<br>"+
   c("10/5")+"<br>"+
   c(`10
      +
      10
      -
      1`)
)


1 - ভাসমান
2 সম্পর্কে ভুলে গেছেন - আবার ভাসমান সমস্যা: পার্স ইন্ট ফ্লোরস বাইনারি তাই আমাকে 1e14 দিয়ে গুণতে হবে এবং তারপরে 16384
3 দিয়ে ভাগ করতে হবে - আশা করি যে প্রদত্ত কাজটি অর্জন করেছে, এখন গল্ফ শুরু করুন: ডি 4 - বিভাজনে
একটি বাগ ছিল


10
106 ^ 3 বাইট? এক মিলিয়নেরও বেশি!
ETH প্রোডাকশনস

2
@ আমি জানতাম যে এই জাতীয় মন্তব্য আসছে; ডি
নিকেল

আপনি পরিবর্তন e.match(/[2-9]/g)করতে পারেন e.match`[2-9]`
ব্যবহারকারী 81655


@nicael ('0b'+$&*1e14)/1638এই উচিত কাজ কিন্তু আমি 100% নিশ্চিত নই
Downgoat

5

জল্ফ, 31 বাইট, নন-কেপটিং

আমি এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত একটি শালীন পরিমাণে ক্রিয়াকলাপ যোগ করেছি এবং, সুতরাং, এটি নন-প্রতিযোগিতা হিসাবে বিবেচিত হয়। আমি খুশি কারণ অবশেষে আমি আনরি ফাংশন বাস্তবায়িত করেছি (যেমন (H,S,n)=>valES6 এর মতো , তবে ES5 তে সমর্থিত!)

? hi"[2-9]"~eiB~epT mpvid|m'H2H
? hi"[2-9]"                     if the input contains any of 2..9
           ~ei                   evaluate i (implicitly print)
                                else
                   _mpvid        map the input split into number groups
                          m'H2    to H as a binary float
                         |    H   (or keep H, if that doesn't work)
                 pT              join by spaces
               ~e                evaluate
              B                  convert to binary (implicitly print)

টেস্ট স্যুট , আপনার নিজস্ব ইনপুট করার চেষ্টা করুন , অথবা নিজে ইনপুট সেট


4
আপনার কোডটি তার পাঠকদের "হাই" বলে!
সাইয়েস

কি দারুন. আমি তা খেয়াল করিনি! : ডি
কনর ও'ব্রায়ান

5

বাশ, 60 বাইট

[ -z `tr -dc 2-9<<<$1` ]&&s='obase=2;ibase=2;';bc -l<<<$s$1

উদাহরণ রান:

$ ./bin_dec_add.sh 1+1
10
$ ./bin_dec_add.sh 1+2
3

@ পিটু ১৯৯৮ dcএর অপারেশনগুলির বিপরীত পোলিশ ক্রম প্রয়োজন, যা চ্যালেঞ্জের দ্বারা অনুমোদিত নয়।
টাইজয়েড

3

𝔼𝕊𝕄𝕚𝕟 2, 46 চর / 72 বাইট

ë(ïđ/[2-9]⎞?ï:`(⦃ïē/[\d.]+⌿,↪(Յ+$*ḊⁿḎ)/Ẁ²)})ⓑ`

Try it here (Firefox only).

ব্যাখ্যা

ë(ïđ/[2-9]⎞?ï:`(⦃ïē/[\d.]+⌿,↪(Յ+$*ḊⁿḎ)/Ẁ²)})ⓑ` // implicit: ï=input, Ḋ=10, Ḏ=14, Ẁ=128
ë(                                              // eval
  ïđ/[2-9]⎞?                                    // does ï have 2-9?
            ï                                   // if so, eval input
             :                                  // else, eval:
              `(⦃ïē/[\d.]+⌿,                    // replace the binary numbers
                                                // with their base 10 equivalents:
                            ↪(Յ+                // translates to `0b`
                                $*ḊⁿḎ           // matched number * 10^14
                                     )/Ẁ²       // divided by 128^2
                                         )})ⓑ` // converted to binary
                                                // implicit output

1

পাওয়ারশেল, 107 বাইট

param($e)iex(("{0}String($($e-replace'(\d+)','{0}Int32("$1",2)'),2)"-f'[Convert]::To'),$e)[$e-match'[2-9]']

Ungolfed

param($e) # Accept single argument
Invoke-Expression # Eval
  ( # Expression, resulting in an array of 2 elements
    (
      "{0}String( # Binary
        $( # Inline subexpression
          $e -replace'(\d+)', '{0}Int32("$1",2)'
          # "1010+10-1" becomes "{0}Int32("1010",2)+{0}Int32("10",2)-{0}Int32("1",2)"
        )
      ,2)"
      -f '[Convert]::To'
      # "{0}Int32("1010",2)+{0}Int32("10",2)-{0}Int32("1",2)" becomes
        "[Convert]::ToString([Convert]::ToInt32("1010",2)+[Convert]::ToInt32("10",2)-[Convert]::ToInt32("1",2),2)"
    ),
      $e # Plain
    )
    [$e-match'[2-9]'] # Return 1st element of array if regex matches, else 0

উদাহরণ

PS > .\Calc.ps1 1010+10-1
1011

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