প্রদত্ত রেডিক্স সহ স্ট্রিংয়ের পূর্ণসংখ্যা


13

একটি পূর্ণসংখ্যাকে 2 এবং 62 এর মধ্যে একটি রেডিক্স প্রদত্ত একটি সংখ্যার উপস্থাপনায় রূপান্তর করতে সবচেয়ে সংক্ষিপ্ত ফাংশনটি লিখুন eg যেমন:

to_string(351837066319, 31) => "codegolf"

2
উদাহরণ থেকে আমি সংগ্রহ করি যে ছোট ছোট অক্ষরগুলি প্রথমে আসে, অর্থাত্ 62 ভিত্তিতে অঙ্কগুলি 0-9, এজেড, এজেড সেই ক্রমে হয়?
sepp2k

হ্যাঁ, ঠিক এটিই।
মিশিগেল ডি মেরে

at 0:00, ডাঙ, নিখুঁত
Zacharý

উত্তর:


4

ডিসি - 43 অক্ষর

[sb[58-]s_[lb~dZ39*+dB3<_9+rd0<xrP]dsxxk]sf

আমরা যদি ধরে নিই যে স্ট্যাকটিতে কেবলমাত্র দুটি যুক্তি রয়েছে We

[[58-]s_dSb~dZ39*+dB3<_9+SadLbr0<fLaPc]sf

স্বতন্ত্র প্রোগ্রাম হিসাবে, আমাদের কেবলমাত্র 37 টি অক্ষর প্রয়োজন:

?o[58-]s_[O~dZ39*+dB3<_9+rd0<xrP]dsxx

ব্যবহারের পরিবর্তে [39+]sz9<z, আমরা কেবল ব্যবহার করি Z39*+, যা একক সংখ্যার জন্য 39 এবং একটি দ্বি সংখ্যার জন্য 78 যুক্ত করবে। পরিবর্তে 113, আমরা ব্যবহার B3( ADএছাড়াও কাজ)।


4

রুবি 1.8 - 75 অক্ষর, পুনরাবৃত্তি সহ।

f=proc{|n,b|(n<b ? "":f[n/b,b])+([*'0'..'9']+[*'a'..'z']+[*'A'..'Z'])[n%b]}

পুনরাবৃত্তি ছাড়া

f=proc{|n,b|d=[*'0'..'9']+[*'a'..'z']+[*'A'..'Z'];s=d[n%b];s=d[n%b]+s while(n/=b)>0;s}

(উভয়ই ডগবার্টের 1.9 সমাধানের উপর ভিত্তি করে))


4

পাইথন - 86

from string import*
def t(n,r,s=''):
 while n:s=printable[n%r]+s;n/=r
 return s or'0'

স্ট্রিং আমদানি কৌশলটির জন্য হোয়া লং ট্যামের কারণে ক্রেডিট


3

পাইথন, 93 99

from string import *
d=digits+letters
def t(n,b):
 s=''
 while n>0:s=d[n%b]+s;n/=b
 return s or '0'

সম্পাদনা : "বা '0'" খালি স্ট্রিংয়ের ক্ষেত্রে যোগ করা হয়েছে


N = 0 হলে ব্যর্থ হয়, খালি স্ট্রিংটি ফিরে আসে যখন এটি '0' ফিরে আসে। যাইহোক স্ট্রিং ট্রিকের জন্য +1
জুয়ান

2

ডিসি, 61 অক্ষর

[sr[lr~rd0<x]dsxxk[39+]sa[58-]sb[d9<ad78<b48+anz0<p]dspxIP]sf

হিসাবে চালান:

dc -e'[sr[lr~rd0<x]dsxxk[39+]sa[58-]sb[d9<ad78<b48+anz0<p]dspxIP]sf' -e'351837066319 31 lfx'

বা:

dc -f base.dc -e '351837066319 31 lfx'

ব্যাখ্যা: আমরা স্ট্যাকের নম্বর এবং বেস নিই। srনিবন্ধটি আর এ বেস সংরক্ষণ করে। রিকার্সিভ ফাংশন [lr~rd0<x]dsxxএকটি সংখ্যা বিশ্লিষ্ট হয়েছে TOSবেস তার সংখ্যা মধ্যে register r। প্রথম kঅঙ্কটি সর্বদা 0 থাকে, স্ট্যাক থেকে মুছে ফেলা হয় (যথাযথতা নির্ধারণ করুন, যা ডিফল্টরূপে 0 হয়, সুতরাং এটি কোনও নলের সমতুল্য)। তারপরে, পুনরাবৃত্ত ফাংশন [48+d57<ad122<banz0<p]dspxএএসসিআইআই-তে প্রতিটি অঙ্ককে আউটপুট দেয়, ফাংশন এ ( [39+]sa) এবং বি ( [58-]sb) এর সাহায্যে। IPএকটি নতুন লাইন আউটপুট। ফাংশনটি রেজিস্টারে সংরক্ষিত থাকে এবং এর মাধ্যমে fআবেদন করা যেতে পারে lfx


1
যদি আপনি 48+ টি শেষ পর্যন্ত যান তবে এটি দুটি সংরক্ষণ করে (57 এবং 122 উভয়ই একটি অক্ষর ফেলে দেয়)। একটি ছোটখাট পর্যবেক্ষণ হ'ল একটি ফাংশন হিসাবে, আপনি স্ট্যাকের বাইরে আর কিছুই নেই তা ধরে নিতে পারবেন না, তবে আপনি যদি লুপগুলি একত্রিত করেন তবে সমস্যাটি মুছে ফেলা হবে (এটি কয়েকটি অক্ষরও সংরক্ষণ করবে)।
নবিব

2

রুবি - 72 70 59 অক্ষর

f=->n,b{(n<b ? "":f[n/b,b])+[*?0..?9,*?a..?z,*?A..?Z][n%b]}

পুনরাবৃত্তি ছাড়াই, 70 টি অক্ষর

f=->n,b{d=*?0..?9,*?a..?z,*?A..?Z;s=d[n%b];s=d[n%b]+s while(n/=b)>0;s}

পরীক্ষা

irb(main):080:0> f[351837066319, 31]
=> "codegolf"
irb(main):081:0> f[0, 31]
=> "0"

1

হাস্কেল, 109 টি অক্ষর

m=divMod
d(0,x)b=[f x]
d(r,x)b=f x:d(m r b)b
f=(!!)$['0'..'9']++['a'..'z']++['A'..'Z']
s x b=reverse$d(m x b)b

1

বেফুঞ্জ - 53 x 2 = 106 টি অক্ষর

বা 53 + 46 = 99 টি অক্ষর যদি আপনি নীচে বাম দিক দিয়ে আপনার প্রোগ্রামের অন্যান্য অংশগুলি রুট করতে চান।

11p01-\>:11g%\11g/:#v_$>:1+!#v_:45+`!#v_:75*`!#v_   v
       ^            <  ^,    $# +"0"  < +"'"   <-":"<

প্রথমে স্ট্যাকে রূপান্তর করার জন্য নম্বরটি রাখুন, তারপরে র‌্যাডিক্স এবং ডানদিকের উপরের বাম থেকে এই ফাংশনটি প্রবেশ করান। আপনার জন্য স্ট্রিং আউটপুট দেবে (যেহেতু বেফুঞ্জ স্ট্রিং ভেরিয়েবল সমর্থন করে না) এবং নীচে থেকে নীচে $চলে যাবে। (1,1)রেডিক্স স্টোরেজের জন্য কক্ষের প্রয়োজন ।

উদাহরণস্বরূপ 351837066319ইনপুট এবং চালানো উদাহরণস্বরূপ দেওয়া :

&56*1+    11p01-\>:11g%\11g/:#v_$>:1+!#v_:45+`!#v_:75*`!#v_   v
                 ^            <  ^,    $# +"0"  < +"'"   <-":"<
                                       @

1

গল্ফস্ক্রিপ্ট - 32 টি অক্ষর

{base{.9>39*+.74>58*48--}%''+}:f

1

রুবি 1.9 - 80 74 68

t = -> n, b {d = ? 0 ..? 9 ,? a ..? z, *? a ..? z; s = ''; (s = d [n% b] + s; n) / = খ) যখন এন> 0; s}

খালি স্ট্রিংয়ের জন্য '0' দিয়ে, 95 89 82 টি অক্ষর:

t=->n,b,s=''{d=*?0..?9,*?a..?z,*?A..?Z;(s=d[n%b]+s;n/=b)while n>0;s.empty?? ?0: s}

রুবি ১.৯ - দুর্ভাগ্যক্রমে কেবল ৩ base বেস পর্যন্ত কাজ করে:

t=->n,b{n.to_s(b)}

2
আপনি ]+[এর সাথে প্রতিস্থাপন করতে পারেন ,
নিমো 157

1

বাশ, rs৯ টি চর

f(){
dc<<<$2o$1p|perl -pe"y/A-Z/a-z/;s/ \d+/chr$&+($&<10?48:$&<36?87:29)/ge"
}

বিসি_বিএএসএএমএএমএক্সটি 16 হিসাবে নথিভুক্ত করা হয়েছে I আমি জানি না কী অলৌকিক ঘটনাটি নমুনা ইনপুটটিতে আউটপুটটিকে সঠিক করে তোলে তবে এটি অন্যান্য ঘাঁটির জন্য আবর্জনা (অর্থাত্ অ্যালফানামের অক্ষরগুলি) আউটপুট করে।
জেবি

@ জেবি: আপনি কোন বিসি ব্যবহার করছেন? জিএনইউ বিসি কাজ করা উচিত। sysconf(_SC_BC_BASE_MAX)আমার সিস্টেমে 99 প্রদান করে, 16 সর্বনিম্ন প্রয়োজনীয়।
নিনজালজ

@ জেবি: এটিও নোট করুন যে পূর্ববর্তী সংশোধনীগুলি যেখানে বগি ছিল, আমি কেবল প্রশ্নের প্রয়োজনীয়তার উপর ঝাঁপিয়ে পড়েছিলাম।
নিনজালজ

বিসি 1.06। এখন আপনি এটি উল্লেখ করুন, আমি ম্যানপেজ থেকে চিত্রটি পেয়েছি, তবে এটি ভুলভাবে পড়েছি। 16 ইনপুট বেস সীমা। আউটপুট বেস সীমা 999 I আমি প্রথম সংস্করণে চেষ্টা করেছিলাম, এখন এটি আবার দেখা যাক।
জেবি

1
আমি মনে করি এটি একটি ছোট অক্ষরের পরিবর্তে 11-16 ঘাঁটিগুলির জন্য বড় হাতের অক্ষরগুলি আউটপুট করে। আপনি dcপরিবর্তে ব্যবহার করে বেস রূপান্তর কিছু সংরক্ষণ করতে পারেন bc
ন্যাব




-1

জাভাস্ক্রিপ্ট 170 বাইট

function f1(ni,nr){
let s1='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
let s2='';
while(ni>0){
s2=s1[ni%nr]+s2;
ni=Math.floor(ni/nr);
}
return s2;
}

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

এই প্রশ্নটি কোড-গল্ফকে ট্যাগ করা হয়েছে , তাই আপনার কোডটি যথাসম্ভব ছোট করার চেষ্টা করা উচিত। আমি উল্লিখিত স্টাফগুলির কিছু দ্রুত গল্ফিং এই 125 বাইট তৈরি করতে পারে এবং আরও অনেক ছোট করতে হবে
জো কিং

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