রিয়েল বেস রূপান্তর


19

বেস রূপান্তরকরণের জন্য আমাদের কাছে কয়েকটি চ্যালেঞ্জ ছিল তবে এগুলি সমস্তই পূর্ণসংখ্যার মানগুলিতে প্রযোজ্য বলে মনে হয়। আসল সংখ্যা দিয়ে এটি করা যাক!

চ্যালেঞ্জ

ইনপুট:

  • দশটি বেসে প্রকাশিত একটি বাস্তব ধনাত্মক x যথার্থ সমস্যাগুলি এড়াতে, সংখ্যাটি 10 −6 এর চেয়ে বেশি এবং 10 15 এরও কম বলে ধরে নেওয়া যেতে পারে ।
  • একটি লক্ষ্য বেস । এটি 2 থেকে 36 এর পূর্ণসংখ্যা হবে।
  • একটি ভগ্নাংশ সংখ্যার সংখ্যা এন । এটি 1 থেকে 20 পর্যন্ত পূর্ণসংখ্যা হবে।

আউটপুট: উপস্থাপনা এর এক্স বেস সঙ্গে এন ভগ্নাংশ সংখ্যার।

আউটপুট এক্সপ্রেশন গণনা করার সময়, n -th এর বাইরে অঙ্কগুলি কেটে ফেলা উচিত (বৃত্তাকার নয়)। উদাহরণস্বরূপ, x = 3.141592653589793বেসে b = 3হয় 10.0102110122..., সুতরাং n = 3আউটপুট জন্য 10.010(কাটা) হবে না, 10.011(বৃত্তাকার)।

ভগ্নাংশের অংশে সীমাবদ্ধ সংখ্যার সংখ্যা নির্ধারণকারী এক্স এবং বি এর জন্য , সমতুল্য অসীম প্রতিনিধিত্ব ( এন অঙ্কগুলিতে কাটা )ও অনুমোদিত। উদাহরণস্বরূপ, 4.5দশমিক এছাড়াও হিসাবে প্রতিনিধিত্ব করা যেতে পারে 4.49999...

ভাসমান পয়েন্ট ত্রুটিগুলি নিয়ে চিন্তা করবেন না ।

ইনপুট এবং আউটপুট ফর্ম্যাট

লিড জিরো ছাড়াই এক্স দেওয়া হবে। যদি x এর পূর্ণসংখ্যা হিসাবে ঘটে থাকে তবে আপনি ধরে নিতে পারেন যে এটি একটি শূন্য দশমিক অংশ ( 3.0) অথবা দশমিক অংশ ছাড়াই দেওয়া হবে 3

আউটপুট নমনীয়। উদাহরণস্বরূপ, এটি হতে পারে:

  • পূর্ণসংখ্যা এবং ভগ্নাংশের মধ্যে একটি উপযুক্ত বিভাজক (দশমিক পয়েন্ট) সহ সংখ্যার প্রতিনিধিত্বকারী একটি স্ট্রিং। সংখ্যা 11, 12ইত্যাদি (জন্য 10 পরলোক) চিঠি হিসাবে প্রতিনিধিত্ব করা যাবে A, Bস্বাভাবিক হিসাবে, বা অন্য কোন স্বতন্ত্র অক্ষর হিসাবে (অনুগ্রহ করে উল্লেখ করুন)।
  • পূর্ণসংখ্যার অংশের জন্য একটি স্ট্রিং এবং ভগ্নাংশের অংশের জন্য অন্য স্ট্রিং।
  • দুটি অ্যারে / তালিকা, প্রতিটি অংশের জন্য একটি, সংখ্যা থেকে শুরু 0করে সংখ্যা পর্যন্ত 35

কেবলমাত্র বিধিনিষেধগুলি হ'ল পূর্ণসংখ্যা এবং ভগ্নাংশগুলি পৃথকভাবে (উপযুক্ত বিভাজক) বলা যেতে পারে এবং একই বিন্যাসটি ব্যবহার করুন (উদাহরণস্বরূপ, [5, 11]পূর্ণসংখ্যার অংশকে ['5', 'B']উপস্থাপিত তালিকার জন্য এবং ভগ্নাংশের অংশের প্রতিনিধিত্বকারী তালিকার জন্য নয়)।

অতিরিক্ত বিধি

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

আউটপুট সংখ্যায় একটি স্ট্রিং হিসাবে দেখানো হয় 0, ..., 9, A, ..., Zব্যবহার .দশমিক বিভাজক হিসেবে।

x, b, n                    ->  output(s)

4.5, 10, 5                 ->  4.50000 or 4.49999
42, 13, 1                  ->  33.0 or 32.C
3.141592653589793, 3, 8    ->  10.01021101
3.141592653589793, 5, 10   ->  3.0323221430
1.234, 16, 12              ->  1.3BE76C8B4395
10.5, 2, 8                 ->  1010.10000000 or 1010.01111111
10.5, 3, 8                 ->  101.11111111
6.5817645, 20, 10          ->  6.BCE2680000 or 6.BCE267JJJJ
0.367879441171442, 25, 10  ->  0.94N2MGH7G8
12944892982609, 29, 9      ->  PPCGROCKS.000000000


জন্য 42, 13, 1আমরা থাকতে পারে 33পরিবর্তে 33.0?
লিফডে ওয়েইন

@ লিফডেভেন না, চ্যালেঞ্জের একটি অপরিহার্য অংশ হ'ল আউটপুটটির nদশমিক সংখ্যা থাকতে হবে
লুইস মেন্ডো

উত্তর:


1

জেলি , 16 বাইট

*×⁵b⁸ḞðṖḣ⁹,ṫø⁹N‘

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

নোট করুন যে সিঙ্গলেটগুলি আউটপুটে উপাদান হিসাবে মুদ্রিত হয়েছে।


আরে, তোমার ছবিতে কি হয়েছে?
লুইস মেন্ডো

@ লুইস মেন্ডো কিছু লোক এটি রেন্ডার করতে পারে না, যেহেতু এটি ফেসবুকের সাথে সংযুক্ত ছিল
লিকি নুন

আপনি জানেন যে আপনি এখানে একটি ছবি আপলোড করতে পারেন, তাই না? এই
লুইস মেন্ডো

7

জাভাস্ক্রিপ্ট (ES8), 81 74 71 বাইট

f=
(x,b,n,g=x=>x.toString(b))=>g(x-x%1)+'.'+g(x%1).substr(2,n).padEnd(n,0)
<div oninput=o.textContent=f(+x.value,b.value,n.value)><input id=x><input type=number min=2 max=36 value=10 id=b><input type=number min=1 max=20 value=10 id=n><pre id=o>

জন্য কাজ করে xমধ্যবর্তী 1e-6এবং 1e21, bথেকে 2থেকে 36(ঠিক হিসাবে প্রয়োজন) এবং nথেকে 1থেকে কিছু 10করার 48ফ্লোটিং পয়েন্ট সামনে বেস উপর নির্ভর করে ত্রুটি অলক্ষিতভাবে প্রবেশ সম্পাদনা:। সংরক্ষিত @Birjolaxew সহায়তায় 7 বাইট। @Tsh এর সাহায্যে আরও 3 বাইট সংরক্ষণ করা হয়েছে। পূর্ববর্তী 74-বাইট সংস্করণটি নেতিবাচক সংখ্যাগুলির সাথেও কাজ করেছে:

f=
(x,b,n,[i,d]=`${x.toString(b)}.`.split`.`)=>i+`.`+d.slice(0,n).padEnd(n,0)
<div oninput=o.textContent=f(+x.value,b.value,n.value)><input id=x><input type=number min=2 max=36 value=10 id=b><input type=number min=1 max=20 value=10 id=n><pre id=o>


1
কেউ কীভাবে রেজেক্সের সাথে বেস রূপান্তর করতে পারে?!?
এরিক দ্য আউটগল্ফার

@ এরিকথ আউটগল্ফার আমি নই, এটি একটি গল্ফিয়ার (আশাবাদী) nএকটি স্ট্রিং থেকে "অঙ্কগুলি" আঁকানোর উপায় ।
নীল

তাহলে কি হয় আপনার ফাংশনের কোর যুক্তিবিজ্ঞান?
এরিক দ্য আউটগল্ফার

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

ওহ এটি বলে .toString(b)... আমাকে বোবা> _ <
এরিক দি আউটগল্ফার

5

পাইথন 2 , 153 149 144 137 135 109 বাইট

def f(x,b,m):
 i=int(x);s=[];t=[]
 while i:s=[i%b]+s;i/=b
 while m:m-=1;x=x%1*b;t+=[int(x)]
 return s or[0],t

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

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


যদি এটি সহায়তা করে: আমি একটি নোট যুক্ত করেছি যে আপনাকে কেবলমাত্র বৃহত্তর সংখ্যক 1e-6(এবং আগের চেয়ে কম 1e15) সমর্থন করতে হবে
লুইস মেন্ডো

5

পার্ল 6 , 25 বাইট

->\x,\b,\n{+x .base(b,n)}

চেষ্টা করে দেখুন

সম্প্রসারিত:

-> \x, \b, \n {
  +x            # make sure it is a Numeric
  .base( b, n ) # do the base conversion
}

নোট করুন যে স্থানটি এমন যাতে পার্স করা হয় (+x).base(b,n)
না +( x.base(b,n) )


যদি এটি সহায়তা করে: আমি একটি নোট যুক্ত করেছি যে আপনাকে কেবলমাত্র বৃহত্তর সংখ্যার 1e-6(এবং আগের চেয়ে কম 1e15) সমর্থন করতে হবে
লুইস মেন্ডো

3

গণিত, 158 বাইট tes

যেহেতু এই চ্যালেঞ্জ অলরেডি ম্যাথমেটিকাতে @ কেলিলাউডার দ্বারা একটি খুব সুন্দর উত্তর পেয়েছে, তাই পরীক্ষার ক্ষেত্রে প্রদর্শিত ফলাফল হিসাবে আমি (ভিন্ন পদ্ধতির সাথে) সঠিক ফলাফল উত্পন্ন করার চেষ্টা করেছি

ToUpperCase[""<>Insert[StringReplace[ToString@BaseForm[#,p]&/@PadRight[#&@@(d=RealDigits[#,p=#2]),w=(#3+d[[2]])][[;;w]],"\n "<>ToString@p->""],".",d[[2]]+1]]&


ইনপুট

[12944892982609, 29, 9]

আউটপুট

PPCGROCKS.000000000


3

রুবি , 45 বাইট

->x,b,n{(x*b**n).round.to_s(b).insert(~n,?.)}

কেন?

যেহেতু বেস বিতে b ^ n 10 ^ n হয়, আমরা সেই সংখ্যাটি দ্বারা x গুণ করি এবং তারপরে যেখানে দশমিক পয়েন্ট যুক্ত হয় সেখানে যুক্ত করব।

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


-1 বাইট + বাগফিক্স প্রতিস্থাপন .roundকরে .to_i; এটি টেস্ট আউটপুটগুলির সাথে মেলে না এমনদের জন্য আউটপুটটির শেষ অঙ্কটি ঠিক করে। প্রথম বন্ধন .insert ~n,?.ছাড়াই ব্যবহার করে আরও বাইট করুন ।
Nnnes

3

সি (জিসিসি) ,157 152 বাইট

long intবৃহত্তর পরীক্ষার কেসগুলির সাথে এটির জন্য 64 বিটের প্রয়োজন Ne

-5 বাইট পিটার কর্ডসকে ধন্যবাদ

#define P r=99;i=l=x;do{z[--r]=48+7*(l%b>9)+l%b;}while(l/=b);printf(z+r)
long i,r,l;char z[99];f(x,b,n)double x;{P;putchar(46);while(n--){x=(x-i)*b;P;}}

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

সম্পাদনা করুন: যদি কোনও নিউলাইন বিভাজক দ্বারা পৃথক দুটি স্ট্রিং আউটপুট দেওয়ার মঞ্জুরি দেওয়া হয় তবে কয়েকটি বাইট শেভ করা যায়:

149 বাইট:

#define P r=99;i=l=x;do{z[--r]=48+7*(l%b>9)+l%b;}while(l/=b);printf(z+r)
long i,r,l;char z[99];f(x,b,n)double x;{P;puts("");while(n--){x=(x-i)*b;P;}}

সম্পাদনা করুন: এই জমাটি দীর্ঘতম নয়, হ্যাঁ!


2
printf(z+r)এতে কোনও %অক্ষর না থাকলে আপনি ব্যবহার করতে পারেন । (এটি কোড-গল্ফ; সুরক্ষা এবং ভাল অনুশীলনগুলি উইন্ডোতে যায়: পি)। আপনি puts(z+r)বিনামূল্যে একটি নতুন লাইন পেতে ব্যবহার করতে পারেন ( puts("")দ্বিতীয় সংস্করণে সংরক্ষণ করে )।
পিটার

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

আহা, মন্তব্যগুলির একটি দালাল সংস্করণ ছাড়া শেষ অংশটি সুস্পষ্ট ছিল না।
পিটার

floatএর চেয়ে সংক্ষিপ্ত double, তবে মনে হয় প্রশ্নটির জন্য একটি doubleস্ট্রিং ইনপুট লাগবে না ।
পিটার

1
ওটার দরকার নেই. সি এর কিছু সাধারণ বাস্তবায়নগুলিতে 64৪-বিট থাকে longএবং কোড-গল্ফের বিধি অনুসারে আপনার উত্তরটি বৈধ হওয়ার জন্য আপনার যা প্রয়োজন। (এছাড়াও, সি এবং সি ++ কোড-গল্ফ উত্তরগুলির পক্ষে -৪-বিট ধরে নেওয়া সাধারণ long, যেহেতু এটি চেষ্টা করে অনলাইন ব্যবহার করে)) আমি আপনার সম্পাদনাটি আবার ঘুরিয়ে দেওয়ার পরামর্শ দিচ্ছি, এবং কেবল "নোট longঅবশ্যই 64৪-বিট হওয়া উচিত " এটি বৃহত্তর পরীক্ষার ক্ষেত্রে সমর্থন করার জন্য।
পিটার

2

গণিত 47 বাইট

TakeDrop@@r[#,#2,#3+Last@(r=RealDigits)[#,#2]]&

RealDigitsদশমিকের বামে সংখ্যার সংখ্যা বের করার জন্য প্রথমে দু'বার কল করা।


যদি এটি সহায়তা করে: আমি একটি নোট যুক্ত করেছি যে আপনাকে কেবলমাত্র বৃহত্তর সংখ্যার 1e-6(এবং আগের চেয়ে কম 1e15) সমর্থন করতে হবে
লুইস মেন্ডো

1
আমি ভেবেছিলাম যে প্রশ্নটি কেবল জিজ্ঞাসা করছে TakeDrop@@RealDigits[##]এবং তবে আমি বুঝতে পেরেছিলাম যে আমার কাছে জিনিসগুলি ভুলভাবে পড়েছিল - আপনার সমাধানটি সর্বোত্তম বলে মনে হচ্ছে।
মার্ক এস।

2

সেজম্যাথ , 68 বাইট

def f(n,b,k):y=n.str(b).split('.')+[''];return y[0],(y[1]+'0'*k)[:k]

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


যদি এটি সহায়তা করে: আমি একটি নোট যুক্ত করেছি যে আপনাকে কেবলমাত্র বৃহত্তর সংখ্যার 1e-6(এবং আগের চেয়ে কম 1e15) সমর্থন করতে হবে
লুইস মেন্ডো

1

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

f=fromIntegral
g 0 _=[]
g n p=g(div n p)p++[mod n p]
z=(!!)(['0'..'9']++['A'..'Z']++['.'])
h x p l|(i,d)<-properFraction x=z<$>(g i p++[36]++(last$g(floor$d*(f p**f l))p:[0<$[1..l]|d==0]))

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

g প্রদত্ত বেসে সেই সংখ্যাটি উপস্থাপন করে একটি সংখ্যাকে একটি তালিকায় রূপান্তর করে

zঅক্ষরের পূর্ণসংখ্যার মানচিত্র ( 36 = .)

h সংখ্যার পূর্ণসংখ্যা এবং ভগ্নাংশের সাথে পূর্ববর্তী ফাংশনগুলি প্রয়োগ করে।


1

অ্যাক্সিয়োম, 566 বাইট

c:=alphanumeric()::List Character
f(a:INT,b:PI):List Character==(r:=[];repeat(y:=a rem b;r:=cons(c.(y+1),r);a:=a quo b;a=0=>break);r)
g(x)==floor(x)::INT
F(x)==>for i in 1..#x repeat z:=concat(z,x.i)
w(a:Float,b:PI,n:NNI):String==
  z:="";b<2 or b>36 or a<0=>z
  ip:=g(a);    fp:=g((a-ip)*b^n)
  ipb:=f(ip,b);fpb:=f(fp,b);cnt:=n-#fpb
  for i in 1..cnt repeat fpb:=cons(c.1,fpb)
  F(ipb);z:=concat(z,".");F(fpb)
  z

h(a,b,n)==>(n>=0 and b>0=>(nd123:=10+g(n*log_2(b)/log_2(10));mxv123456:=digits(nd123::PI);res78484:=w(a,b,n);digits(mxv123456);res78484);"")

এই প্রশ্নটি বিশেষভাবে কঠিন ছিল; কিছু লেখার কিছুক্ষণ পরে, অঙ্কগুলি সংরক্ষণ করার জন্য একটি ম্যাক্রো ব্যবহার করে সঠিক ফলাফল মনে হচ্ছে () ... এটি খুব বেশি গল্ফ হয় না ... ফলাফল:

(7) -> h(4.5,10,5)
   (7)  "4.50000"
                                                             Type: String
(8) -> h(42,13,1)
   (8)  "33.0"
                                                             Type: String
(9) -> h(%pi,3,8)
   (9)  "10.01021101"
                                                             Type: String
(10) -> h(%pi,5,10)
   (10)  "3.0323221430"
                                                             Type: String
(11) -> h(1.234,16,12)
   (11)  "1.3BE76C8B4395"
                                                             Type: String
(12) -> h(0.367879441171442,25,10)
   (12)  "0.94N2MGH7G8"
                                                             Type: String
(13) -> h(12944892982609,29,9)
   (13)  "PPCGROCKS.000000000"
                                                             Type: String
(14) -> h(6.5817645,20,10)
   (14)  "6.BCE267JJJJ"
                                                             Type: String

আসল লক্ষ্য হ'ল একটি ফাংশন যা প্রতিটি ফ্লোটকে বেস ২.৩6 এ রূপান্তর করে [এতে কে: = ডিজিট () রয়েছে বা প্রতিটি গণনা করা সংখ্যাকে% পাই বা% ই বা দুটি ফ্লোট / ইন্টির বিভাজন ১.৩.৩ হিসাবে । ['ওও' সংখ্যা]

(15) -> h(%pi,13,800)
   (15)
  "3.1AC1049052A2C77369C0BB89CC9883278298358B370160306133CA5ACBA57614B65B410020
  C22B4C71457A955A5155B04A6CB6CC2C494843A8BBBBA9A039B77B34CB0C036CAC761129B3168
  B8BAB860134C419787C911812985646C7AAA3025BAA118B3AB8265CB347852065667291482145
  6C533447BC53A5262177C9985455C395626091A2CC3126B395C91B65B654A1804226197528410
  29A8A4A55CC7937B347B77B5A914127B11C6A57A84510775A9A467819A468B6B74339CC1290B2
  24921C6A771BC2AB6AB41735119C2231545A86399483119AAA5AC34B46B7B5C9089946A364860
  9B26CB0BAC0ABCBA182C12881933AA93C3942C71AA664753989A3C82166BA2109796C4A134607
  59725A72C9117AC980556A147557C319438287226C94725B125753B009387A48AA45CB1960A04
  A064052C00A6069371949872B14590895C555CB01A39B7589824B8621618A8B1971841201A2AB
  B04B80C7534CC1CB079581491995B46C679555316288C82665645A1A600C1A669B865651B6B842470C018B03C1115B3C4306C015C0B45C"
                                                             Type: String

1

অ্যাক্সিয়াম, 127 বাইট

g(a)==floor(a)::INT;f(a:Float,b:PI,n:NNI):Any==(b<2 or n>28=>%i;x:=g(a);radix(x,b)+radix(g((a-x)*b^n),b)::RadixExpansion b/b^n)

ফলাফল

(4) -> f(%e,2,10)
   (4)  10.1011011111
                                                   Type: RadixExpansion 2
(5) -> f(%e,3,10)
   (5)  2.2011011212
                                                   Type: RadixExpansion 3
(6) -> f(%e,35,10)
   (6)  2.P4VBNEB51S
                                                  Type: RadixExpansion 35
(7) -> f(1.4,35,10)
   (7)  1.DYYYYYYYYY
                                                  Type: RadixExpansion 35
(8) -> f(%pi,3,8)
   (8)  10.01021101
                                                   Type: RadixExpansion 3
(9) -> f(%pi,5,10)
   (9)  3.032322143
                                                   Type: RadixExpansion 5
(10) -> f(1.234,16,12)
   (10)  1.3BE76C8B4395
                                                  Type: RadixExpansion 16

চূড়ান্ত শূন্য উদাহরণের জন্য এটিতে কিছুটা সমস্যা আছে

 f(4.5,10,5)

'4.5' নয়, '4.5' ফিরে আসবে

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