एक पूर्णांक को 2 और 62 के बीच एक मूलांक को संख्यात्मक प्रतिनिधित्व में बदलने के लिए सबसे छोटा कार्य लिखें। उदा:
to_string(351837066319, 31) => "codegolf"
at 0:00, खतरा, परिपूर्ण।
एक पूर्णांक को 2 और 62 के बीच एक मूलांक को संख्यात्मक प्रतिनिधित्व में बदलने के लिए सबसे छोटा कार्य लिखें। उदा:
to_string(351837066319, 31) => "codegolf"
at 0:00, खतरा, परिपूर्ण।
जवाबों:
[sb[58-]s_[lb~dZ39*+dB3<_9+rd0<xrP]dsxxk]sf
हम इसे थोड़ा छोटा कर सकते हैं यदि हम मान लें कि स्टैक में केवल दो तर्क हैं।
[[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भी काम करता है)।
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 समाधान पर आधारित हैं।)
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'
EDIT : "या '0'" रिक्त स्ट्रिंग मामले के लिए जोड़ा गया
[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। पहला अंक हमेशा 0 होता है, जिसे स्टैक से हटा दिया जाता है k(सटीक सेट करें, जो डिफ़ॉल्ट रूप से 0 भी है, इसलिए यह एक एनओपी के बराबर है)। फिर, पुनरावर्ती फ़ंक्शन [48+d57<ad122<banz0<p]dspxASCII में प्रत्येक अंक को फ़ंक्शंस ( [39+]sa) और बी ( [58-]sb) की मदद से आउटपुट करता है । IPएक नई रूपरेखा प्रस्तुत करता है। फ़ंक्शन को रजिस्टर में संग्रहीत किया जाता है f, और इसके द्वारा आमंत्रित किया जा सकता है lfx।
या 53 + 46 = 99 वर्ण यदि आप अपने प्रोग्राम के अन्य भागों को नीचे बाईं ओर से मार्ग में लाना चाहते हैं।
11p01-\>:11g%\11g/:#v_$>:1+!#v_:45+`!#v_:75*`!#v_ v
^ < ^, $# +"0" < +"'" <-":"<
पहले नंबर को स्टैक पर रूपांतरित करने के लिए रखें, फिर मूलांक और इस फ़ंक्शन को ऊपर-बाएँ दाएँ से प्रवेश करें। आपके लिए स्ट्रिंग का उत्पादन करेगा (क्योंकि Befunge स्ट्रिंग चर का समर्थन नहीं करता है) और नीचे $जाने से नीचे की ओर छोड़ें । (1,1)मूलांक भंडारण के लिए सेल की आवश्यकता होती है ।
उदाहरण के लिए 351837066319इनपुट और रन में दिए गए उदाहरण के लिए :
&56*1+ 11p01-\>:11g%\11g/:#v_$>:1+!#v_:45+`!#v_:75*`!#v_ v
^ < ^, $# +"0" < +"'" <-":"<
@
t = -> n, b {d = ? 0 ..? 9? ;? a .. z; *? A ..? z? s = ''? (s = d [n% b] + s; n / = b) जबकि n> 0;
खाली स्ट्रिंग के लिए '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}
रूबी 1.9 - दुर्भाग्य से केवल बेस 36 तक काम करता है:
t=->n,b{n.to_s(b)}
]+[साथ बदल सकते हैं ,।
f(){
dc<<<$2o$1p|perl -pe"y/A-Z/a-z/;s/ \d+/chr$&+($&<10?48:$&<36?87:29)/ge"
}
sysconf(_SC_BC_BASE_MAX)मेरे सिस्टम पर 99 रिटर्न, 16 न्यूनतम आवश्यक है।
dcइसके बजाय का उपयोग करके आधार रूपांतरण में कुछ बचा सकते हैं bc।
from string import*
f=lambda n,b:n and f(n/b,b)+printable[n%b]or''
-Minteger -ap , 52 बाइट्सdo{$\=(0..9,a..z,A..Z)[$_%$F[1]].$\}while$_/=$F[1]}{
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) और उस लंबे स्ट्रिंग को कम करने के लिए