বাইনারি থেকে দশমিক রূপান্তরকারী


32

বাইনারি থেকে দশমিক রূপান্তরকারী

আমি যতদূর দেখতে পাচ্ছি, আমাদের কাছে দশমিক রূপান্তর চ্যালেঞ্জ থেকে সহজ বাইনারি নেই।


এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইতিবাচক বাইনারি পূর্ণসংখ্যার গ্রহণ করে এবং এর দশমিক মান আউটপুট করে।

আপনাকে কোনও বিল্টিন বেস রূপান্তর ফাংশন ব্যবহার করার অনুমতি নেই। পূর্ণসংখ্যা থেকে দশমিক ফাংশন (যেমন, কোনও ফাংশন যা 101010রূপান্তরিত হয় [1, 0, 1, 0, 1, 0]বা "101010") এই নিয়ম থেকে অব্যাহতিপ্রাপ্ত এবং এইভাবে অনুমোদিত।

নিয়মাবলী:

  • কোডটি অবশ্যই বাইনারি সংখ্যাগুলিকে আপনার ভাষার পক্ষে সর্বাধিক সংখ্যাসূচক মান সমর্থন করে (ডিফল্টরূপে)
  • বাইনারি উপস্থাপনায় আপনি নেতৃস্থানীয় শূন্যগুলি বেছে নিতে পারেন
  • দশমিক আউটপুটে নেতৃস্থানীয় জিরো নাও থাকতে পারে।
  • ইনপুট এবং আউটপুট ফর্ম্যাটগুলি alচ্ছিক, তবে অঙ্কগুলির মধ্যে কোনও বিভাজক থাকতে পারে না। (1,0,1,0,1,0,1,0)কোনও বৈধ ইনপুট ফর্ম্যাট নয়, তবে উভয়ই 10101010এবং (["10101010"])
    • আপনাকে অবশ্যই "স্বাভাবিক" দিক থেকে ইনপুট নিতে হবে। 1110হয় 14না 7

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

1
1

10
2

101010
42

1101111111010101100101110111001110001000110100110011100000111
2016120520371234567

এই চ্যালেঞ্জটি কয়েকটি অন্যান্য চ্যালেঞ্জের সাথে সম্পর্কিত, উদাহরণস্বরূপ এটি , এটি এবং এটি



আউটপুটটি কি স্বাক্ষরিত হতে হবে বা এটিতে স্বাক্ষর করা যেতে পারে? এছাড়াও, যদি আমার ভাষার মান দৈর্ঘ্যের উপর নির্ভর করে 32-বিট এবং 64-বিট পূর্ণসংখ্যার মধ্যে স্বয়ংক্রিয়ভাবে স্যুইচ হয়ে যায় তবে আউটপুট উভয় ব্যাপ্তিতে সাইন ইন করা যাবে? উদাহরণস্বরূপ- দুটি বাইনারি মান রয়েছে যা দশমিক -1( 32 1'sএবং 64 1's) রূপান্তরিত হবে
দুধ

এছাড়াও, আউটপুটটি কি ভাসমান হতে পারে, এটির কোনও পূর্ণসংখ্যা হওয়া দরকার?
কারসিজেনিকেট

@ কারসিজেনিকেট এটি অবশ্যই একটি পূর্ণসংখ্যা হতে পারে তবে এটি কোনও ডেটা ধরণের হতে পারে। যতক্ষণ round(x)==xআপনি ভাল আছেন :) এর 2.000জন্য গৃহীত আউটপুট 10
স্টিভি গ্রিফিন 21

আহ মিষ্টি. ধন্যবাদ।
কারসিজিনিট

উত্তর:


56

জেলি , 5 বাইট

DḤ+¥/

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

ব্যাখ্যা

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

কাস্ট

  • Dসংখ্যা, বাঁক: একটি একসংখ্যা (একক যুক্তি ফাংশন) হয় 1234মধ্যে [1, 2, 3, 4]

  • এটি একটি মোনাড যা তার একক যুক্তি দ্বিগুণ করে।

  • + এটি একটি ডায়াড (দুটি আর্গুমেন্ট ফাংশন) যা তার বাম এবং ডান যুক্তি যুক্ত করে।

সেখান থেকে কিছুটা কৌতূহল পেয়ে যায়।

পার্স টাইমে যা ঘটে তা এখানে

  • D, এবং +পড়া হয়। শৃঙ্খল মত দেখায় [D, Ḥ, +]

  • পরবর্তী দুটি চরিত্রগুলি হল কুইকস , যা আমরা এ পর্যন্ত পড়েছি এমন লিঙ্কগুলিতে (ফাংশন) পার্স-টাইম পোস্টফিক্স অপারেটরের মতো কাজ করে।

  • যখন ¥পড়া হয়, শেষ দুটি লিঙ্কগুলি পপড হয়ে যায় এবং একটি লিঙ্ক দ্বারা প্রতিস্থাপিত হয় যা তাদের রচনা তৈরি করে ডায়াডের মতো কাজ করে। তাই এখন চেইনের মতো দেখাচ্ছে [D, dyad(Ḥ+)]

  • যখন /পড়া হয়, শেষ লিঙ্কটি (যা একটি ডায়াড হওয়া উচিত) পপড হয়ে প্রতিস্থাপন হয়ে একটি মোনাড দ্বারা প্রতিস্থাপিত হয় যা এই ডায়াড ব্যবহার করে ভাঁজ হয় (স্বজ্ঞাত: f/একটি তালিকা নেয়, এতে কমাগুলি প্রতিস্থাপন করে fএবং ফলাফলটি মূল্যায়ন করে))

  • চূড়ান্ত শৃঙ্খলা দেখতে [D, fold(dyad(Ḥ+))]দুটি মোনাদ মতো।

রান টাইমে যা হয় তা এখানে

  • ইনপুট (একটি সংখ্যা) কার্যকর মান (বলুন) এর মধ্যে স্পষ্টভাবে পড়া হয় 101010

  • Dকার্যকর করা হয়, তার অঙ্কগুলি ( [1,0,1,0,1,0]) সহ কার্যকর মানকে প্রতিস্থাপন করে ।

  • fold(dyad(Ḥ+))কার্যকর করা হয়, কার্যকর মানটির সাথে প্রতিস্থাপন করে 1∗0∗1∗0∗1∗0যেখানে ডায়াড হয় Ḥ+

সুতরাং x∗yমূল্যায়ন কি ?

  • একটি dyadic সংজ্ঞা, কাজের মান প্রাথমিকভাবে বাম আর্গুমেন্ট x,।

  • , ডাবল মোনাড, এই মানটি দ্বিগুণ করে। কাজের মান এখন 2x

  • +, প্লাস ডায়াডে সঠিক যুক্তির অভাব রয়েছে, সুতরাং এটি একটি হুক : একটি বিশেষ সিনট্যাকটিকাল প্যাটার্ন যেখানে এই ডায়াডের ডান যুক্তিকে ইনজেক্ট করা হয় +। এটি 2x + yচূড়ান্ত কার্যকরী মান হিসাবে ফল দেয় যা প্রত্যাবর্তন হয়।

সুতরাং সম্পূর্ণ এক্সপ্রেশন মূল্যায়ন:

1∗0∗1∗0∗1∗0 = 2×(2×(2×(2×(2×1+0)+1)+0)+1)+0
            = 32×1 + 16×0 + 8×1 + 4×0 + 2×1 + 1×0
            = 42

10
আপনার ব্যাখ্যাগুলি আরও ভাল এবং ভাল হচ্ছে :-)
লুইস মেন্ডো

2
হেই, আমার ধারণা আপনি এখন থেকে এটি করবেন? এটি দুর্দান্ত, +1।
এরিক আউটগলফার

4
আমি মনে করি এটি জেলি এর প্রথম টুকরো যা আমি কখনও বুঝতে পেরেছি। +1 টি!
নীল

সাবাস। আমি আসলে বুঝতে পারি যা আমি প্রথমে যা ভাবছিলাম তা আপাতদৃষ্টিতে এলোমেলো চরিত্রগুলির মধ্যে একটি জঞ্জাল। অপূর্ব ব্যাখ্যা।
সোয়াইনফিশ

1
প্রোগ্রামগুলি চেহারা, অহেম, পাঠযোগ্য, এমনকি প্রোগ্রামগুলি বাইটস্ট্রিংস হিসাবে তৈরি করার জন্য @ মার্ক জেলির নিজস্ব কোডপেজ রয়েছে।
লিন

20

পাইথন 2, 49 37 31 30 বাইট

দশমিক দশমিক উপস্থাপনে এখন এটি বাইনারি সংখ্যা নেবে, যেহেতু পাইথন নির্বিচারে বৃহত পূর্ণসংখ্যাকে পরিচালনা করতে পারে।

b=lambda n:n and n%2+2*b(n/10)

একটি বাইট সংরক্ষণ করার জন্য xnor ধন্যবাদ

বাইনারি দশকে রূপান্তর করার জন্য একটি প্রাথমিক সূত্র দেখে এটি কীভাবে কাজ করে তা দেখার সহজ উপায়:

= 101010 
= 1*(2^5) + 0*(2^4) + 1*(2^3) + 0*(2^2) + 1*(2^1) + 0*(2^0)
= 1*32 + 0*16 + 1*8 + 0*4 + 1*2 + 0*1
= 42

এটি রূপান্তর করার একটি 'স্ট্যান্ডার্ড' উপায়। আপনি তৃতীয় লাইনের মতো প্রসারিত করতে পারেন:

= ((((1*2 + 0)*2 + 1)*2 + 0)*2 + 1)*2 + 0

এবং এটি মূলত যা আমি করেছি তা পুনরাবৃত্ত করার পদ্ধতিটি করছে।

আমার কাছে বিকল্প সমাধান ছিল:

b=lambda n:n and n%10+2*b(n/10)
b=lambda n:n%10+2*(n and b(n/10))
b=lambda n:0if n<1else n%10+2*b(n/10)
b=lambda n:0**(n/10)or n%10+2*b(n/10)
b=lambda n,o=0:o*(n<'0')or b(n[1:],2*o+int(n[0]))
lambda j:sum(int(b)*2**a for a,b in enumerate(j,1))

6
আপনি n%5বা এর n%2পরিবর্তে করতে পারেন n%10
xnor

@ এক্সনর আহ, আমি কীভাবে মিস করেছি তা নিশ্চিত নই! ধন্যবাদ :)
কেডে

12

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

কোড:

$¦v·y+

Explantion জন্য, এর উদাহরণ নিয়ে যাক 101010 । আমরা 1 নম্বর (যা প্রথম সংখ্যা দ্বারা প্রতিনিধিত্ব করা হয়) দিয়ে শুরু করি। এর পরে, আমাদের দুটি মামলা রয়েছে:

  • অঙ্ক একটি হয়, তাহলে 0 , 2 দ্বারা সংখ্যা সংখ্যাবৃদ্ধি।
  • অঙ্কটি যদি 1 হয় তবে সংখ্যাটি 2 দিয়ে গুণুন এবং 1 যুক্ত করুন।

সুতরাং 101010 কেস জন্য নিম্নলিখিত গণনা করা হয়:

  • 1 01010, 1 নম্বর দিয়ে শুরু করুন ।
  • 1 0 1010, দুটি দ্বারা গুণিত করুন, যার ফলে 2 হয়
  • 10 1 010, দুটি দিয়ে গুণ এবং একটি যোগ করুন, যার ফলে 5 হয়
  • 101 0 10, দুই, বা ফলে গুন 10
  • 1010 1 0, দুটি দ্বারা গুণিত এবং একটি যোগ করুন, ফলস্বরূপ 21
  • 10101 0 , দুটি দ্বারা গুণন করুন , ফলস্বরূপ 42 , যা কাঙ্ক্ষিত ফলাফল।

কোড ব্যাখ্যা:

$         # Push 1 and input
 ¦        # Remove the first character
  v       # For each character (starting with the first)
   ·      #   Multiply the carry number by two
    y+    #   Add the current character (converted automatically to a number)

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


সুন্দর! (0
টির জন্য

@ এমিগনা ইয়েপ, ভাগ্যক্রমে আপনার কোডটিতে কেবল ইতিবাচক বাইনারি সংখ্যার জন্য কাজ করা দরকার।
আদনান

এমনকি সেই অংশটিও দেখেনি। খুব সুন্দর তবে :)
এমিগিনা

9

হাস্কেল, 11 111 + 57 = 168 বাইট

import Data.String
instance IsString[Int]where fromString=map((-48+).fromEnum)
f::[Int]->Int
f=foldl1((+).(2*))

+57 কম্পাইল পতাকা জন্য বাইট -XOverloadedStrings, -XOverlappingInstancesএবং -XFlexibleInstances

চ্যালেঞ্জটির কয়েকটি জটিল আইও ফর্ম্যাট রয়েছে কারণ উত্স কোডে ডেটা টাইপগুলি কীভাবে প্রকাশ করা হয় তার উপর এটি প্রচুরভাবে নির্ভর করে। আমার প্রথম সংস্করণ (16 বাইট), যথা

foldl1((+).(2*))

পূর্ণসংখ্যার একটি তালিকা নেয়, উদাহরণস্বরূপ [1,0,1,0,1,0]এবং এটি অবৈধ হিসাবে ঘোষিত হয়েছিল কারণ আক্ষরিক হাস্কেল তালিকাগুলির ,মধ্যে রয়েছে। প্রতি সেটের তালিকা নিষিদ্ধ নয়। আমার নতুন সংস্করণে আমি এখন একই নামকরণ করা একই একই ফাংশনটি ব্যবহার করি fতবে আমি "উদ্ধৃত ঘেরযুক্ত চরিত্রের ক্রমগুলি" ওভারলোড করি। ফাংশনটি এখনও এনটোটেশনের ধরণে দেখতে দেখতে পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে [Int] -> Intতবে একক অঙ্কের পূর্ণসংখ্যার তালিকাগুলি এখন "1234"যেমন লিখতে পারে যেমন

f "101010"

যা মূল্যায়ন 42। দুর্ভাগ্য হাস্কেল, কারণ স্থানীয় তালিকা বিন্যাসটি চ্যালেঞ্জের নিয়মগুলিতে ফিট করে না। বিটিডব্লিউ, f [1,0,1,0,1,0]এখনও কাজ করে।


2
দুর্ভাগ্যক্রমে একটি তালিকা বৈধ ইনপুট নয়।
জোনাথন অ্যালান

@ জোনাথন অ্যালান: কেন? এবং যদি তাই হয় তবে এটি কীভাবে একেবারে ইনপুট নেওয়া উচিত? হাসকেলে একটি স্ট্রিং কেবলমাত্র অক্ষরের একটি তালিকা।
নিমি

কেন জানি না ... তবে আমি এ সম্পর্কে প্রথম দিকে অনুসন্ধান করেছিলাম এবং যুক্ত করার জন্য একটি সম্পাদনা করা হয়েছিল " (1,0,1,0,1,0,1,0)একটি বৈধ ইনপুট ফর্ম্যাট নয়, তবে উভয়ই 10101010এবং (["10101010"])তাই।" তদ্ব্যতীত একটি মন্তব্য প্রস্তাব দেয় যে অক্ষরের অ্যারে গ্রহণযোগ্য হয় যদি সেভাবেই কোনও স্ট্রিং ইনপুটকে ব্যাখ্যা করা হয়।
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান: যে কোনও "বাইনারি পূর্ণসংখ্যা" (আমাদের যে ইনপুটটি নিতে হবে) তা সহজাতভাবে পৃথক করা হয়, এটি ২ এর ক্ষমতার ক্রম The কোনওভাবে আমাকে পৃথক অঙ্কগুলি নিতে হবে।
নিমি

2
এখানে অপ: যদি ইনপুট করা সম্ভব 10101010, "10101010"বা অনুরূপ কিছু সংগ্রাম করে তারপর কাজ জমা বৈধ। আপনি এটিকে স্ট্রিং, তালিকা, পূর্ণসংখ্যা বা যাই হোক না কেন বলতে পারেন। ইনপুট করা [1][0][1][0]বা [1,0,1,0]ঠিক আছে না। মূলত, কোথাও একটি সারিতে কেবল একগুচ্ছ এবং শূন্যগুলি আঘাত করা সম্ভব হবে। এটা কি পরিষ্কার?
স্টিভি গ্রিফিন

7

রেটিনা, 15 বাইট

বাইনারি থেকে অ্যানারিতে রূপান্তরিত হয়, তারপরে অ্যানারি থেকে দশমিক।

1
01
+`10
011
1

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


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

10
@ RomanGräf এখনও নেই n't আমি কেবল আমার সমাধানের প্রক্রিয়াটি বর্ণনা করছিলাম।
mbomb007

7

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

for(;""<$c=$argv[1][$i++];)$n+=$n+$c;echo$n;

আমি শপথ করতে পারি যে আমি এই প্রশ্নটি আগে দেখেছি। কিন্তু ভাল.

বাম থেকে ডানে নম্বরটি পড়ে, বামে শিফট করে এবং বর্তমান বিট যুক্ত করে।


7

জাভাস্ক্রিপ্ট (ES6), 33 31 বাইট

s=>[...s].map(c=>r+=+c+r,r=0)|r

সম্পাদনা করুন: সংক্ষিপ্ত তবে কম মিষ্টি: 2 বাইট সংরক্ষণ করেছেন @ ETH প্রডাকশনগুলির জন্য ধন্যবাদ।


যেমনটি প্রায়শই .maps=>[...s].map(c=>+c+r+r,r=0)|r
ঘটে থাকে ততই

@ETH প্রোডাকশনগুলি কীভাবে আপনার ফাংশন 0 ছাড়া অন্য কিছু ফেরত দেয়?
নীল

দুঃখিত, এটি হওয়া উচিতs=>[...s].map(c=>r+=+c+r,r=0)|r
ETH প্রোডাকশনগুলি

7

ল্যাবরেথ , 17 15 বাইট

-+:
8 +
4_,`)/!

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

কোড চিত্র

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

লুপ শুরু ,

  • , স্ট্যাকের স্টপটিতে পরবর্তী ইনপুট চরিত্রের ascii কোড মানটি চাপুন, বা EOF হলে -1 টিপুন।
  • _48 স্ট্যাকের শীর্ষে 48 টি ধাক্কা দেয়
  • -পপ ওয়াই, পপ এক্স, পুশ করুন x-y। পূর্ববর্তী নির্দেশাবলীতে "0" এর জন্য 0 এবং "1" এর জন্য 1 প্রদানের ইনপুট থেকে 48 বিয়োগ করার প্রভাব রয়েছে।
  • +পপ ওয়াই, পপ এক্স, পুশ করুন x+y
  • : স্ট্যাকের শীর্ষটি নকল করুন
  • + এটি এবং পূর্ববর্তী নির্দেশাবলীর বর্তমান মান 2 দ্বারা গুণিত করার প্রভাব রয়েছে

সুতরাং কোডটির বৃত্তাকার অংশটি কার্যকরভাবে বর্তমান সংখ্যাটি 2 দিয়ে গুণ করে এবং 1 বা 0 বর্ণটি ইনপুট ছিল কিনা তার উপর নির্ভর করে হয় 1 বা 0 যুক্ত করে।

লেজ

যদি স্ট্যাকের শীর্ষটি নেতিবাচক হয় (যার অর্থ ইওএফ পাওয়া গিয়েছিল), কোডটি জংশনে বাম দিকে ঘুরবে (সেমিকোলনের দিকে যাচ্ছে)।

  • Get `` স্ট্যাকের শীর্ষস্থানটি নেওয়ার জন্য 1 পান
  • ) 2 পেতে স্ট্যাকের শীর্ষে আইক্রেমেন্ট করুন
  • /পপ ওয়াই, পপ এক্স, পুশ এক্স / ওয়াই (পূর্ণসংখ্যা বিভাগ)। এটি শেষটিকে পূর্বাবস্থায় ফেলার প্রভাব রাখে*2লুপ থেকে ।
  • !স্ট্যাকের শীর্ষের পূর্ণসংখ্যার উপস্থাপনা আউটপুট করুন। এই মুহুর্তে প্রোগ্রামটি ঘুরিয়ে দেয় কারণ এটি একটি শেষ প্রান্তে আঘাত করে এবং তারপরে একটি ত্রুটি সহ প্রস্থান করে কারণ এটি শূন্য দ্বারা ভাগ করার চেষ্টা করে।

আমাকে ২ বাইট বাঁচানোর জন্য এবং মার্টিন ইন্ডারকে ধন্যবাদ (এবং আমাকে কীভাবে ভুলে যাওয়ার চেষ্টা করা যায়)


আপনার পরিবর্তে _48-কেবল সহজভাবে করতে পারেন #%তবে দুর্ভাগ্যক্রমে আমি দেখছি না কীভাবে এটি বাইট গণনাতে সহায়তা করতে পারে।
মার্টিন এন্ডার

আপনি এর পরিবর্তে একটি বাইট সংরক্ষণ করতে পারেন`);_2
মার্টিন এন্ডার

@ মার্টিনএেন্ডার, আমি আপনার মন্তব্য সম্পর্কে বুঝতে পারি না #%। আপনি কী ব্যাখ্যা করতে পারবেন যে কীভাবে এটি _48-ascii থেকে ইনটে রূপান্তর করতে প্রতিস্থাপন হিসাবে কাজ করে । টিপটির জন্য ধন্যবাদ )। আমি যে পরিবর্তন করব।
রবার্ট হিকম্যান 21

আপনার প্রোগ্রামের সেই মুহুর্তে সর্বদা স্ট্যাকের দুটি মান থাকে তাই #কেবল সংক্ষিপ্ত _2। যদিও _2%ASCII এর পূর্ণসংখ্যার জন্য সাধারণ রূপান্তর পদ্ধতি নয়, এটি এখানে কাজ করে কারণ আপনি কেবল সম্ভাব্য ইনপুট হিসাবে প্রথম দুটি অঙ্কে আগ্রহী। একটি বিকল্প হবে _1&(যেহেতু মডুলো 2 কেবলমাত্র সর্বনিম্ন উল্লেখযোগ্য বিট বের করে)।
মার্টিন এন্ডার

উহু. উজ্জ্বল। তবে হ্যাঁ আমি নিশ্চিত নই যে কীভাবে #%সামগ্রিকভাবে কোডটি ছোট করার জন্য সেই বিকল্পটি ( ) ব্যবহার করতে হবে ।
রবার্ট হিকম্যান 21

6

ব্রেন-ফ্লাক , 46 , 28 বাইট

([]){{}({}<>({}){})<>([])}<>

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

অনেকগুলি বাইট @ রিলে ধন্যবাদ রক্ষা করেছে!

যেহেতু মস্তিষ্ক-ফ্লাক বাইনারি ইনপুট নিতে পারে না তাই ইনপুটটি '0 এবং' 1 এর তালিকা।

ব্যাখ্যা:

#Push the height of the stack
([])

#While true:
{

 #Pop the height of the stack
 {}

 #Push this top number to (the other stack * 2)
 ({}<>({}){})

 #Toggle back on to the main stack
 <>

 #Push the new height of the stack
 ([])

#endwhile
}

#Toggle back to the other stack, implicitly display.
<>

ভালোলাগা! এটি ছাড়া মস্তিষ্কের
ঝাঁকুনি

2
^। আমি নিজে কিছু মন্তব্য না রাখলে আমি নিজের প্রোগ্রামগুলিও পড়তে পারি না।
রিলে 20

অংশটি সম্পূর্ণরূপে মুক্তি পেয়ে আপনি 32 বাইটে নামাতে পারেন এবং "অন্যান্য স্ট্যাকের সাথে সংখ্যার যোগ করুন" পদক্ষেপের জন্য এটি (অন্যান্য স্ট্যাক) * 2 এ যুক্ত করুন। ([]){({}[()]<({}<>({}){})><>)}<>
রিলে 20

এবং আপনি আর 4 বাঁচাতে পারবেন কেবলমাত্র শুরুতে পপিংয়ের পরে এবং আবার উচ্চতাটি আবার চাপ দিয়ে। ([]){{}({}<>({}){})<>([])}<>
রিলে 20

@ রিলে ওহে আমার ছাগল, এটাই বুদ্ধিমান। আপনাকে অনেক ধন্যবাদ!
ডিজেএমসিএমহেম

6

জাভা, 84 79 46 48 বাইট

  • সংস্করণ 3.1

long/ 48 বাইটে পরিবর্তন করা হয়েছে :

s->{long x=0;for(char c:s)x=c-48l+x*2;return x;}
  • সংস্করণ 3.0

কিছু গল্ফিং / 46 বাইট করেছেন:

s->{int x=0;for(char c:s)x=c-48+x*2;return x;}
  • সংস্করণ 2.0

! @Geobits / ধন্যবাদ 79 বাইট:

s->{int i=Math.pow(2,s.length-1),j=0;for(char c:s){j+=c>48?i:0;i/=2;}return j;}
  • সংস্করণ 1.0

84 বাইট:

s->{for(int i=-1,j=0;++i<s.length;)if(s[i]>48)j+=Math.pow(2,s.length-i+1);return j;}

1
অনুমান করি আমার পুনরাবৃত্তি সমাধান করা উচিত ছিল। lulz। ভাল কাজ
পোকে

আপনার ইনপুট ধরণের তালিকা <চ্যারাকটার> বা স্ট্রিং? যদি এটি পরে হয়, আমি অজানা ছিলাম জাভা 8 এটি করতে পারে! এটা যদি প্রাক্তন হয় যে চ্যালেঞ্জ দ্বারা অনুমোদিত?
পোকে

sহওয়া উচিত char[]। আমি আশা করি এটি অনুমোদিত ...
রোমান গ্রাফ

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

1
সম্ভবত এই প্রতি ইনপুট টাইপ জরিমানা । আউটপুট ইমো
পোকে দিন

4

বেফুঞ্জ -98, 12 বাইট

2j@.~2%\2*+

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

ইনপুট থেকে একবারে একটি চর পড়ে, এর মান মডুলো 2 (0 হয় চার (48), 1 হ'ল চর (49%) নিয়ে এটিকে 0 বা 1 তে রূপান্তর করে, তারপরে বর্তমান মান দ্বিগুণ করার এবং যুক্ত করার স্বাভাবিক অ্যালগরিদম ব্যবহার করে প্রতিবার নতুন ডিজিট।

বোনাস: এটি যে কোনও ধরণের ইনপুট স্ট্রিংয়ের সাথে কাজ করে, আমি যে কোনও মজার ইনপুট-> আউটপুট সংমিশ্রণটি সন্ধান করার জন্য কিছুক্ষণ চেষ্টা করেছি, কিন্তু আমি কিছুই উত্পাদন করতে সক্ষম হইনি (দুঃখের সাথে, "উত্তর" = 46)। পারবে তুমি?


হাঃ হাঃ হাঃ. আমি আমার উত্তর দিয়ে একই খেলা খেলছিলাম। আমি উত্সাহিত করতে পারে এমন আকর্ষণীয় নম্বরটি 666
জেমস হোল্ডারেন্স

সুন্দর! আমি 6 666 এর জন্য উপযুক্ত কিছু খুঁজে পেতে পারি নি: ডি ক্যাপিটালাইজেশনের মানগুলিতে প্রভাব
লিও

@ জেমস হোল্ডারনেস - আমিও একই কাজ করছি এবং ৩ 366 ফিরিয়ে আনার জন্য আমি কেবল 'থিপিয়িয়ার' পেয়েছি, আপনার সত্যই ভাল।
চিল পেলিকান

4

জাভাস্ক্রিপ্ট (ES7) 41 40 36 বাইট

f=([c,...b])=>c?c*2**b.length+f(b):0

ইনপুট হিসাবে একটি স্ট্রিং লাগে

ETH প্রোডাকশনগুলিতে একটি বাইট ধন্যবাদ শেভ করে

f=([c,...b])=>c?c*2**b.length+f(b):0
document.write([
    f('101010'),
    f('11010'),
    f('10111111110'),
    f('1011110010110'),
].join("<br>"))


1
এর ডান থেকে বাম সাহচর্য **অদ্ভুত, তবে এটি এখানে ব্যবহার করে দুর্দান্ত কাজ। 1<<b.lengthএকই জিনিসটি করবে, তবে এটির বিশ্লেষণ হওয়া থেকে প্রথম বন্ধনীর প্রয়োজন হবে (c*1)<<(b.length+...)। আমার মনে হয় আপনি প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন b[0]সঙ্গে b+b( এখানে দেখতে )।
ETH প্রোডাকশনগুলি

4

সি # 6, 85 37 36 বাইট

long b(long n)=>n>0?n%2+2*b(n/10):0;
  • কেডাকে ধন্যবাদ41 বাইট সংরক্ষণের !
  • সি # 6 এ পরিবর্তন করে আরও 7 বাইট সংরক্ষণ করা হয়েছে।

সম্ভবত এটি কিছু অনুপ্রেরণা সরবরাহ করতে পারে ? ;)
কেডে

@ কেড এটি করেন, ধন্যবাদ! আমি পাইথন উত্তরের দিকে চেয়ে ছিলাম যা একই মুহুর্তে আপনি একইভাবে যুক্ত করেছেন একই কৌশলটি ব্যবহার করে: ডিআই সি # 6 এর সাথে আরও ছোট হতে পারে
ইয়াতসি


3

সি, 53

v(char*s){int v=0,c;while(c=*s++)v+=v+c-48;return v;}

আমার জাভাস্ক্রিপ্ট উত্তর হিসাবে একই

পরীক্ষা আইডিয়ন


আপনি ঘোষণা করে 4 বাইট সংরক্ষণ করতে পারবেন vএবং c(যদিও আপনি নাম পরিবর্তন করতে হবে যেমন গ্লোবাল ভেরিয়েবল v, এটি আগে থেকেই ফাংশনের নাম যেহেতু) এই মত:w=0;c;v(char*s){while(c=*s++)w+=w+c-48;return w;}
Steadybox

@ স্টেডিবক্স এটি হতে পারে w,c;তবে আমি উত্তর চাই না যখন গ্লোবালগুলি ব্যবহার করতে চাই না (এমনকি কোড-
গল্ফেও

@ স্টেডিবক্স গ্লোবালগুলি 0 তেও ডিফল্ট রয়েছে, যাতে আপনি এটিকে ফেলে দিতে পারেন =0
অ্যালগমির

3

পার্ল, 25 বাইট

-৩ বাইট @ ডম হেস্টিংসকে ধন্যবাদ।

-pপতাকা জন্য 24 বাইট কোড + 1 বাইট ।

$\|=$&<<$v++while s/.$//

এটি চালানোর জন্য:

perl -pe '$\|=$&<<$v++while s/.$//' <<< 101010

ব্যাখ্যা:

$\|=$&<<$v++  # Note that: we use $\ to store the result
              # at first $v=0, and each time it's incremented by one
              # $& contains the current bit (matched with the regex, see bellow)
              # So this operation sets a $v-th bit of $\ to the value of the $v-th bit of the input
while         # keep doing this while...
s/.$//        #  ... there is a character at the end of the string, which we remove.
         # $\ is implicitly printed thanks to -p flag

3

পুশি , 10 বাইট

কমান্ড লাইন 0/1 একটি তালিকা হিসাবে ইনপুট লাগে: $ pushy binary.pshy 1,0,1,0,1,0

L:vK2*;OS#

অ্যালগরিদম সত্যিই দ্বিতীয় স্ট্যাক থাকার সৌন্দর্য দেখায়:

            \ Implicit: Input on stack
L:    ;     \ len(input) times do:
  v         \   Push last number to auxiliary stack
   K2*      \   Double all items
       OS#  \ Output sum of auxiliary stack

এই পদ্ধতিটি কাজ করে কারণ স্ট্যাকটি stack length - nসংখ্যায় পৌঁছানোর আগে দ্বিগুণ হয়ে যাবে n, পরে এটি দ্বিতীয় স্ট্যাকের পরে ফেলে দেওয়া হবে। প্রক্রিয়াটি ইনপুটটির মতো দেখতে এখানে রয়েছে101010 :

1: [1,0,1,0,1,0]
2: []

1: [2,0,2,0,2]
2: [0]

1: [4,0,4,0]
2: [2]

1: [8,0,8]
2: [২,০]

1: [16,0]
2: [2,0,8]

1: [32]
2: [2,0,8,0]

1: []
2: [2,0,8,0,32]

2 + 8 + 32 -> 42

3

মতলব, 30 বাইট

@(x)sum(2.^find(flip(x)-48)/2)

সর্বশেষ পরীক্ষার কেসে গোলাকার ত্রুটি রয়েছে (কারণ double), সুতরাং আপনার যদি পুরো নির্ভুলতার প্রয়োজন হয়:

@(x)sum(2.^uint64(find(flip(x)-48))/2,'native')

47 বাইট সহ


আমি এটি পরীক্ষা করতে পারছি না, তবে আমি বিশ্বাস করি @(x)sum(2.^(find(flip(x)-48)-1))32 বাইটের জন্য সমস্ত ক্ষেত্রে সঠিক ফলাফল দেবে। যদি এক মাত্রিক হয় এমনভাবে flipকাজ করে । fliplrx
স্টিভি গ্রিফিন

চমৎকার সমাধান! আমিও রাউন্ডিং ত্রুটির মধ্যে দৌড়েছি, ঠিক করার জন্য ধন্যবাদ। এক্স এর বিন্যাসটি কী? একটি সংখ্যাতে ফ্লিপ বা ফ্লিপ্লার কল করা ঠিক সেই নম্বরটি ফেরত দেয়।
ম্যাটডাব্লুএইচ

এক্স বাইনারি স্ট্রিং, তাই এটি দিয়ে কল f=@(x)..; f('1111001010')
জোনাস

3

রেটিনা , 12 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

+%`\B
¶$`:
1

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

বিকল্প সমাধান:

+1`\B
:$`:
1

ব্যাখ্যা

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

^
,
+`,(.)
$`$1,
1

রেটিনায় দশমিক সংখ্যা নির্মানের একমাত্র বুদ্ধিমান উপায় হল জিনিস গণনা করা (কারণ রেটিনার কয়েকটি বৈশিষ্ট্য রয়েছে যা এটি একটি পরিমাণের প্রতিনিধিত্ব করে দশমিক সংখ্যা প্রিন্ট করতে দেয়)। সুতরাং সত্যিই একমাত্র সম্ভাব্য পন্থা হ'ল বাইনারিটিকে আনারিতে রূপান্তর করা এবং তারপরে অ্যানারি অঙ্কের সংখ্যা গণনা করা। শেষ লাইন গণনা করে, তাই প্রথম চারটি বাইনারিকে অ্যানারিতে রূপান্তর করে।

আমরা যে কিভাবে করব? বিটগুলির তালিকা থেকে পূর্ণসংখ্যায় রূপান্তর করতে আমরা ফলাফলটি প্রাথমিকভাবে শুরু করি 0এবং তারপরে বিটগুলি সর্বাধিক থেকে কম তাৎপর্যপূর্ণ থেকে চলে যাই, আমাদের ইতিমধ্যে যে মান রয়েছে তার দ্বিগুণ এবং বর্তমান বিটটি যুক্ত করব। যেমন যদি বাইনারি সংখ্যা হয় তবে 1011আমরা সত্যিই গণনা করব:

(((0 * 2 + 1) * 2 + 0) * 2 + 1) * 2 + 1 = 11
           ^        ^        ^        ^

যেখানে আমি স্বচ্ছতার জন্য পৃথক বিট চিহ্নিত করেছি।

আনারিতে এটি করার কৌশলটি হ'ল) ​​দ্বিগুণ করার অর্থ হল সংখ্যা এবং পুনরাবৃত্তি করা) যেহেতু আমরা 1শেষের দিকে এস গণনা করছি , আমাদের প্রসেসে 0এস এবং 1এস এর মধ্যে পার্থক্য করারও দরকার নেই । এটি এক সেকেন্ডের মধ্যে আরও পরিষ্কার হয়ে যাবে।

প্রোগ্রামটি যা করে তা হ'ল এটি ইতিমধ্যে চিহ্নিতকরণ হিসাবে প্রথম দিকে কমা যোগ করে আমরা ইতিমধ্যে কতটা ইনপুট প্রক্রিয়া করেছি:

^
,

চিহ্নিতকারীটির বামে, আমরা যে মানটি সংগ্রহ করছি তা থাকবে (যা সঠিকভাবে শূন্যের অদ্বিতীয় উপস্থাপনায় শুরু করা হয়েছে), এবং মানটির ডান প্রসেসের পরবর্তী বিট হবে। এখন আমরা নীচের বিকল্পটি একটি লুপে প্রয়োগ করি:

,(.)
$`$1,

শুধু তাকান ,(.)এবং $1,, এটি প্রতিবারে মার্কারকে একটুখানি ডানে সরিয়ে দেয়। তবে আমরা সন্নিবেশও করি $`যা চিহ্নিতকারীর সামনে সবকিছু, অর্থাৎ বর্তমান মান, যা আমরা দ্বিগুণ করছি। ইনপুট প্রক্রিয়াকরণের সময় স্বতন্ত্র পদক্ষেপগুলি এখানে দেওয়া হয়েছে 1011, যেখানে আমি $`প্রতিটি লাইনের উপরে সন্নিবেশ করার ফলাফল চিহ্নিত করেছি (এটি প্রথম ধাপের জন্য খালি):

,1011

1,011
 _
110,11
   ___
1101101,1
       _______
110110111011011,

আপনি দেখতে পাবেন যে আমরা অন্য সব কিছুর পাশাপাশি শূন্যকে ধরে রেখেছি এবং দ্বিগুণ করেছি, তবে আমরা যেহেতু শেষে এগুলিকে উপেক্ষা করছি তাই যতক্ষণ না আমরা তাদের দ্বিগুণ করেছি, ততক্ষণ যতক্ষণ না সেগুলির সংখ্যা 1হবে সঠিক। আপনি যদি তাদের গণনা করেন, সেখানে আছেন11 মধ্যে , কেবল আমাদের প্রয়োজন।

সুতরাং এটি কিভাবে 12 বাইট ডাউন এ গল্ফ প্রশ্ন ছেড়ে দেয়। 18-বাইট সংস্করণের সবচেয়ে ব্যয়বহুল অংশটি চিহ্নিতকারী ব্যবহার করতে হচ্ছে। লক্ষ্যটি তা থেকে মুক্তি পাওয়া। আমরা সত্যই প্রতিটি বিটের উপসর্গ দ্বিগুণ করতে চাই, সুতরাং প্রথম ধারণাটি এটি হতে পারে:

.
$`$&

সমস্যাটি হ'ল এই বিকল্পগুলি একই সাথে ঘটে, তাই প্রথম বিট প্রতিটি বিটের জন্য দ্বিগুণ হয় না , তবে এটি প্রতিবার একবার অনুলিপি করে। ইনপুট জন্য 1011আমরা পেতে (সন্নিবেশ চিহ্নিত চিহ্নিত $`):

 _ __ ___
1101011011

আমাদের এখনও ইনপুটটিকে পুনরাবৃত্তভাবে প্রক্রিয়া করতে হবে যাতে দ্বিগুণ প্রথম উপসর্গটি আবার দ্বিতীয় এবং দ্বিগুণ হয়ে যায়। একটি ধারণা হ'ল সর্বত্র চিহ্নিতকারী sertোকানো এবং বারবার উপসর্গের সাথে তাদের প্রতিস্থাপন করুন:

\B
,
+%`,
¶$`

প্রতিটি মার্কারকে প্রথমবারের সাথে উপসর্গের সাথে প্রতিস্থাপনের পরে, আমাদের ইনপুটটির শুরু কোথায় ছিল তা মনে রাখা দরকার, তাই আমরা পাশাপাশি লাইনফিডগুলি সন্নিবেশ করিয়েছি এবং %পরবর্তীটি $`কেবলমাত্র নিকটতম লাইনফিডে জিনিসগুলি তুলেছে তা নিশ্চিত করার জন্য বিকল্পটি ব্যবহার করি ।

এটি কাজ করে, তবে এটি এখনও অনেক দীর্ঘ (16 টি বাইট যখন 1শেষে গণনা করা হয়)। কীভাবে আমরা জিনিসগুলি ঘুরিয়ে দেব? আমরা যে জায়গাগুলিতে চিহ্নিতকারী সন্নিবেশ করতে চাই সেগুলি সনাক্ত করে \B(দুটি সংখ্যার মধ্যে একটি অবস্থান)। কেন আমরা কেবল সেই অবস্থানগুলিতে উপসর্গ সন্নিবেশ করি না? এটি প্রায় কাজ করে, তবে পার্থক্যটি হ'ল পূর্ববর্তী সমাধানে আমরা প্রতিটি প্রতিস্থাপনে একটি করে চিহ্নিতকারীকে সরিয়ে দিয়েছি, এবং প্রক্রিয়াটি শেষ করে দেওয়া গুরুত্বপূর্ণ। যাইহোক, \Bচরিত্রগুলি নয় তবে কেবল পজিশন, তাই কিছুই মুছে ফেলা হয় না। আমরা পারি তবে বন্ধ\Bপরিবর্তে এই জায়গায় একটি অ-অঙ্কের অক্ষর সন্নিবেশ করে মেলা থেকে। এটি শব্দহীন সীমানাকে শব্দের সীমানায় পরিণত করে, যা আগে চিহ্নিতকারী চরিত্রটি সরিয়ে দেওয়ার সমতুল্য। এবং এটিই 12-বাইট সমাধানটি করে:

+%`\B
¶$`:

কেবল সম্পূর্ণতার জন্য, এখানে 1011প্রতিটি পদক্ষেপের পরে খালি লাইন সহ প্রক্রিয়াজাতকরণের পৃথক পদক্ষেপগুলি এখানে রয়েছে :

1
1:0
10:1
101:1

1
1:0
1
1:0:1
1
1:0
10:1:1

1
1:0
1
1:0:1
1
1:0
1
1:0:1:1

আবার, আপনি দেখতে পাবেন যে শেষ ফলাফলটি হ'ল 11 1টি করে।

পাঠকের অনুশীলন হিসাবে, আপনি কি দেখতে পাচ্ছেন যে এটি অন্যান্য ঘাঁটিতে কীভাবে খুব সহজেই জেনারেল করে (বেসে ইনক্রিমেন্টে কিছু অতিরিক্ত বাইটের জন্য)?


2

টি-এসকিউএল, 202 বাইট

DECLARE @b varchar(max)='1',@ int=1 declare @l int=LEN(@b)declare @o bigint=CAST(SUBSTRING(@b,@l,1)AS bigint)WHILE @<@l BEGIN SET @o=@o+POWER(CAST(SUBSTRING(@b,@l-@,1)*2AS bigint),@)SET @=@+1 END PRINT @o

2

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

foreach(str_split(strrev($argv[1]))as$k=>$v)$t+=$v*2**$k;echo$t;

আমরা আমাদের বাইনারি নম্বরটি বিপরীত করি, এটির উপাদান অঙ্কগুলিতে বিভক্ত করি এবং অবস্থানের ভিত্তিতে সেগুলি যোগ করি।


2

বাশ + জিএনইউ ইউটিলিটিস, 29 বাইট

sed 's/./2*&+/g;s/.*/K&p/'|dc

স্টিডিন / স্টাডাউটের মাধ্যমে আই / ও।

sedঅভিব্যক্তি প্রতিটি অঙ্ক মধ্যে বাইনারি আপ splits এবং জন্য একটি RPN অভিব্যক্তি তৈরী করে dcনির্ণয় করা।


2

পাওয়ারশেল ভি 2+, 55 বাইট

param($n)$j=1;$n[$n.length..0]|%{$i+=+"$_"*$j;$j*=2};$i

খুব দীর্ঘ মনে হচ্ছে ... এটি কোনও গল্ফ বলে মনে হচ্ছে না - টিপসগুলি প্রশংসিত।

ব্যাখ্যা

param($n)$j=1;$n[$n.length..0]|%{$i+=+"$_"*$j;$j*=2};$i
param($n)$j=1;                                          # Take input $n as string, set $j=1
              $n[$n.length..0]                          # Reverses, also converts to char-array
                              |%{                  };   # Loop over that array
                                 $i+=+"$_"*$j;          # Increment by current value of $j times current digit
                                              $j*=2     # Increase $j for next loop iteration
                                                     $i # Leave $i on pipeline
                                                        # Implicit output

2

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

f=([...n])=>n+n&&+n.pop()+2*f(n)

পুনরাবৃত্তি আবার দিন বাঁচায়! যদিও প্যারামিটারাইজেশনটি কিছুটা দীর্ঘ বলে মনে হচ্ছে ...


যেহেতু এটি একটি একক "যুক্তি", তাই [...n]বন্ধনীগুলির মধ্যে কি চারপাশে ঘিরে থাকা দরকার?
সাইয়েস

@ কিউস দুর্ভাগ্যক্রমে, হ্যাঁ, বা জেএস একটি সিনট্যাক্সেরর ফেলে দিয়েছে।
ETH প্রোডাকশনগুলি

2

গণিত, 27 13 11 বাইট

Fold[#+##&]

Listবিটগুলির একটিটিকে ইনপুট হিসাবে গ্রহণ করে (উদাঃ {1, 0, 1, 1, 0}- গণিতের সংখ্যাটির বাইনারি উপস্থাপনা 22)


গ্রেগের উত্তর সম্পর্কে মন্তব্য অনুসরণ করে, কীভাবে "ইনপুটটিতে সমস্ত অঙ্কগুলি বিভক্ত করা" বেস রূপান্তর ফাংশন নয়?
মার্টিন ইন্ডার

@ মার্টিনএন্ডার আমি এটি Charactersফাংশনের মতো ব্যবহার করছি ।
জংহওয়ান মিন

@ মার্টিনএেন্ডার , @ নিমির উত্তরে যেমন দেখা গেছে , আমি কেবল 1 ও 0 এর তালিকাটি গ্রহণ করতে পারি কারণ ম্যাথমেটিকাতে বাইনারি সংখ্যার প্রতিনিধিত্ব করার একমাত্র উপায় , যার অর্থ আমার IntegerDigitsপ্রথম স্থানে নেই।
জংহওয়ান মিন

এটি ধরে নিয়েছে যে বেস 10 একটি পূর্ণসংখ্যার "প্রাকৃতিক" প্রতিনিধিত্ব। সত্যিকারের পূর্ণসংখ্যার মানটির সাথে কোনও পছন্দসই বেস সংযুক্ত থাকে না (আমার ধারণা আপনি এটি যেভাবে সঞ্চিত করতে পারেন তা সম্ভবত 256 বেস বা সম্ভবত বেস 2 তবে এটি বাস্তবায়নের বিশদ)। কেবলমাত্র কারণ (আমরা সাধারণত) পূর্ণসংখ্যার অক্ষর লিখতে বেস 10 ব্যবহার করি না এর অর্থ এই নয় যে পূর্ণসংখ্যা মান ইতিমধ্যে 10 বেসে রয়েছে
মার্টিন ইন্ডার

@ মার্টিনেেন্ডার @ লিনের জেলি কোড ব্যবহার করে D, যা একই কাজ করেIntegerDigits
জংহওয়ান মিন

2

ক্লোজার, 114 105 63 41 বাইট

ভি 4: 41 বাইট

-২২ বাইটস @ ক্লিফ্রুটকে ধন্যবাদ। যেহেতু digitএকটি চরিত্র, তাই এটির মাধ্যমে এটি কোডে রূপান্তরিত হতে পারে int, তারপরে আসল নম্বর পেতে এটি থেকে 48 বিয়োগ করে নিন। মানচিত্রটিও সাজানো হয়েছিল। কেন এটি প্রয়োজনীয় মনে হয়েছিল আমি জানি না।

#(reduce(fn[a d](+(* a 2)(-(int d)48)))%)

ভি 3: 63 বাইট

(fn[s](reduce #(+(* %1 2)%2)(map #(Integer/parseInt(str %))s)))

-২২ বাইট (!) অন্য উত্তরগুলি তাকান। আমার "জিপিং" স্পষ্টতই খুব নির্বোধ ছিল। বর্তমান স্থানের পাওয়ারে 2 বাড়ানোর পরিবর্তে এটি বর্তমান সংখ্যা দ্বারা গুণিত করে ফলাফলটি সঞ্চয়ের সাথে যোগ করার পরিবর্তে এটি কেবল সঞ্চয়েরকে 2 দ্বারা গুণিত করে বর্তমান সংখ্যায় যুক্ত করে, তারপরে এটি সংযোজকের সাথে যুক্ত করে। কিছুটা শেভ করার জন্য হ্রাসকরণ ক্রিয়াকে ম্যাক্রোতে রূপান্তর করুন।

@ নিমিমি, এবং @ আদনানকে ধন্যবাদ!

Ungolfed:

(defn to-dec [binary-str]
  (reduce (fn [acc digit]
            (+ (* acc 2) digit))
          (map #(Integer/parseInt (str %)) binary-str)))

ভি 2: 105 বাইট

#(reduce(fn[a[p d]](+ a(*(Integer/parseInt(str d))(long(Math/pow 2 p)))))0(map vector(range)(reverse %)))

-9 বাইটগুলি স্ট্রিংটি উল্টিয়ে দিয়ে যাতে আমার কাছে কোনও বিশ্রী অবতীর্ণ পরিসর তৈরি করার প্রয়োজন হয় না।

ভি 1: 114 বাইট

ঠিক আছে, আমি অবশ্যই জিতছি না! আমার প্রতিরক্ষামুক্তিতে, এটিই প্রথম প্রোগ্রাম যা আমি লিখেছিলাম যে ঘাঁটির মধ্যে রূপান্তরিত হয়, তাই এটি কীভাবে করতে হয় তা শিখতে হয়েছিল আমাকে। এটি এমন কোনও Math/powদ্বিগুণও সহায়তা করে না যা থেকে রূপান্তরকরণ প্রয়োজন, এবং Integer/parseIntকোনও চরিত্র গ্রহণ করে না, সুতরাং পাস করার আগে অঙ্কটি মোড়ানো দরকার।

#(reduce(fn[a[p d]](+ a(*(Integer/parseInt(str d))(long(Math/pow 2 p)))))0(map vector(range(dec(count %))-1 -1)%))

স্থান নম্বরটি উপস্থাপন করে এমন একটি অবতরণ সূচক সহ স্ট্রিং জিপ করুন। ফলাফলের তালিকার চেয়ে হ্রাস।

Ungolfed:

(defn to-dec [binary-str]
  (reduce (fn [acc [place digit]]
            (let [parsed-digit (Integer/parseInt (str digit))
                  place-value (long (Math/pow 2 place))]
              (+ acc (* parsed-digit place-value))))
          0
          (map vector (range (dec (count binary-str)) -1 -1) binary-str)))

#(reduce(fn[a b](+(* a 2)(-(int b)48)))0 %)উন্নত সংস্করণ mapকোডের অংশটিকে সরাসরি এতে সরানো হয়েছে reduce, পূর্ণসংখ্যা পার্সিং পদ্ধতি পরিবর্তিত হয়েছে, শর্টহ্যান্ড ল্যাম্বদা সিনট্যাক্সের সাহায্যে বাহ্যিক ফাংশন তৈরি করুন।
ক্লিফ্রুট

@ ক্লিফ্রুট intপার্স করতে ব্যবহার করা যেতে পারে !? আমি এখানে যতটা চ্যালেঞ্জ করেছি তার মধ্যে 10 বাইটের মতো ছিটকে যাবে।
কার্সিজিনিট

ওহ, আমি দেখছি আপনি কি করছেন। আসকি কোড নেওয়া, তারপরে মান পেতে বিয়োগ করে। আমার ধারণা এটি কেবলমাত্র নির্বাচিত পরিস্থিতিতে কাজ করবে। ওহ ভাল, টিপ জন্য ধন্যবাদ।
কারসিজেনিকেট

2

পার্ল, 21 19 16 + 4 = 20 বাইট

-4 বাইটস @ দাদাকে ধন্যবাদ

-F -p(এর পরে অতিরিক্ত স্থান সহ F) চালান । পাইপ মান ব্যবহার করেecho -n

$\+=$_+$\for@F}{

হিসাবে চালান echo -n "101010" | perl -F -pE '$\+=$_+$\for@F}{'

আমি মনে করি এটি @ দাদার উত্তর থেকে সম্পূর্ণ পৃথক যে এটি তার নিজের প্রবেশের যোগ্য me

ব্যাখ্যা:

-F                              #Splits the input character by character into the @F array
-p                              #Wraps the entire program in while(<>){ ... print} turning it into
while(<>){$\+=$_+$\for@F}{print}
                   for@F        #Loops through the @F array in order ($_ as alias), and...
          $\+=$_+$\             #...doubles $\, and then adds $_ to it (0 or 1)...
while(<>){              }       #...as long as there is input.
                         {print}#Prints the contents of $_ (empty outside of its scope), followed by the output record separator $\

এটি বাইনারি-থেকে-দশমিক রূপান্তরের জন্য আমার ব্যক্তিগত অ্যালগরিদম ব্যবহার করে uses একটি বাইনারি নম্বর দেওয়া, আপনার সংগ্রহকারীর 0 থেকে শুরু করুন এবং একে একে একে এর বিট দিয়ে যান। প্রতিটি বিটটি সঞ্চয়কারীকে দ্বিগুণ করুন, তারপরে আপনার সঞ্চয়ের সাথে বিটটি নিজেই যুক্ত করুন, এবং আপনি দশমিক মান সহ শেষ করুন। এটি কাজ করে কারণ প্রতিটি বিটটি মূল বাইনারি সংখ্যায় আরও কত বিট অবশিষ্ট রয়েছে তার উপর ভিত্তি করে তার অবস্থানের জন্য উপযুক্ত সংখ্যার দ্বিগুণ হয়ে যায়।


এমনকি আরও ছোট: perl -F -pE '$\+=$_+$\for@F}{'
দাদা

আমি এখন সত্যিই খুব সংক্ষেপে হেসেছিলাম। ধন্যবাদ.
গ্যাব্রিয়েল বেনামি

হ্যাঁ, এটি বেশ ঝরঝরে, খুব ভাল!
দাদা

2

আর (32-বিট), 64 বাইট

চরিত্র হিসাবে ফাংশনটির জন্য ইনপুট দেওয়া উচিত। আর এর বেস ফাংশন 32-বিট পূর্ণসংখ্যার সমর্থন করে।

ইনপুট:

# 32-bit version (base)
f=function(x)sum(as.double(el(strsplit(x,"")))*2^(nchar(x):1-1))
f("1")
f("10")
f("101010")
f("1101111111010101100101110111001110001000110100110011100000111")

আউটপুট:

> f("1")
[1] 1
> f("10")
[1] 2
> f("101010")
[1] 42
> f("1101111111010101100101110111001110001000110100110011100000111")
[1] 2.016121e+18

আর (64-বিট), 74 বাইট

চরিত্র হিসাবে ফাংশনটির জন্য ইনপুট দেওয়া উচিত। প্যাকেজটি bit6464-বিট পূর্ণসংখ্যার জন্য ব্যবহার করতে হবে।

ইনপুট:

# 64-bit version (bit64)
g=function(x)sum(bit64::as.integer64(el(strsplit(x,"")))*2^(nchar(x):1-1))
g("1")
g("10")
g("101010")
g("1101111111010101100101110111001110001000110100110011100000111")

আউটপুট:

> g("1")
integer64
[1] 1
> g("10")
integer64
[1] 2
> g("101010")
integer64
[1] 42
> g("1101111111010101100101110111001110001000110100110011100000111")
integer64
[1] 2016120520371234567

2
আপনি করতে পারেন: কয়েকটি বাইট সংরক্ষণ করার el(strsplit(x,""))পরিবর্তে strsplit(x,split="")[[1]]
বিলিওব

অনেক ধন্যবাদ! বিশেষত elফাংশনের জন্য - আমি এটি সম্পর্কে সচেতন ছিলাম না।
djhurio

2

ডায়ালগ এপিএল , 12 বাইট

(++⊢)/⌽⍎¨⍞

স্ট্রিং ইনপুট পান

⍎¨ প্রতিটি চরিত্রকে সংখ্যায় রূপান্তর করুন

বিপরীত

(... )/সংখ্যাগুলির মধ্যে নিম্নলিখিত ফাংশনটি প্রবেশ করান

++⊢ যুক্তি যোগফল এবং যুক্তির যোগফল


ngn শেভ 2 বাইট


1

কে, 8 বাইট

উপরের হাস্কেলের উত্তর হিসাবে একই পদ্ধতি।

{y+2*x}/

উদাহরণ:

{y+2*x}/1101111111010101100101110111001110001000110100110011100000111b
2016120520371234567
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.