संख्याओं का सरलीकरण


16

कैसे, आप 6 या 7-अंकीय फ़ोन नंबर याद नहीं रख सकते जो टीवी स्क्रीन पर एक सेकंड के लिए दिखाई दिया ?! नीचे वर्णित विशेष तकनीक का उपयोग करके, आप एक चलने वाली फोनबुक में बदल जाएंगे!

जाहिर है, संख्या 402को संख्या की तुलना में याद रखना आसान है 110010010, और संख्या 337377की तुलना में संख्या को याद रखना आसान है 957472। इसका मतलब यह है कि एक तरफ संकलित संख्या में, संभव के रूप में कुछ अंक होने चाहिए, और दूसरी ओर, यह वांछनीय है कि संख्या में यथासंभव दोहराई गई संख्याएं हैं।

याद करने में कठिनाई के लिए एक मानदंड के रूप में, हम संख्या में अंकों की संख्या और विभिन्न अंकों की संख्या में योग लेते हैं। एक संस्मरणित संख्या को किसी अन्य संख्या प्रणाली में लिखा जा सकता है, शायद तब इसे याद रखना आसान होगा। उदाहरण के लिए, 65535हेक्साडेसिमल नोटेशन में संख्या दिखती है FFFF

कार्य

आपको जटिलता मानदंड को कम करने के लिए संख्या प्रणाली के आधार का चयन करने के लिए एक कार्यक्रम लिखने की आवश्यकता है। संख्या प्रणाली के आधार को 2 से 36 की सीमा में चुना जाना चाहिए, फिर संख्या 0-9और अंग्रेजी अक्षरों A-Zका उपयोग संख्या का प्रतिनिधित्व करने के लिए किया जा सकता है।

इनपुट

इनपुट में 1 से 999999999 तक दशमलव पूर्णांक है।

उत्पादन

आउटपुट में संख्या प्रणाली का आधार (2 से 36 तक) होना चाहिए, याद रखने की जटिलता की कसौटी को कम करना, और चयनित संख्या प्रणाली में संख्या, एक स्थान से अलग होना। यदि कई आधार मानदंड के लिए समान मूल्य देते हैं, तो उनमें से सबसे छोटा चुनें।

टिप्पणियाँ

  • पत्र अपरकेस ( A-Z) होना चाहिए ।

परीक्षण के मामलों

इनपुट आउटपुट

1              2 1

2              3 2

65535       16 FFFF

123          12 A3


16
बड़ी चुनौती है, लेकिन इसे और अधिक परीक्षण मामलों की आवश्यकता है।
ग्रिम्मी

7
इसके अलावा, आउटपुट स्वरूप थोड़ा सख्त है, आप उदाहरण के लिए दो तत्वों की एक सरणी, आधार और स्ट्रिंग की अनुमति देना चाहते हैं, या उन्हें रिवर्स ऑर्डर में अनुमति दे सकते हैं या किसी अन्य वर्ण द्वारा अलग कर सकते हैं। इसके अलावा, मेरा मानना ​​है कि आप अंकों की संख्या को अंकों की संख्या में जोड़ते हैं, लेकिन आप इसे स्पष्ट करना चाहते हैं।
एरिक आउटोलॉफ़र

8
क्या मैं a-zइसके बजाय उपयोग कर सकता हूं A-Z?
नील

5
क्या हम इसके बजाय केवल संबंधित संख्याओं का उपयोग कर सकते हैं A-Z?
11

8
@VerNick अगली बार जब आप एक समान चुनौती लिखते हैं, तो मैं इन दोनों अनुरोधों को अनुमति देने का सुझाव दूंगा, क्योंकि वे सिर्फ एक अनावश्यक जटिलता हैं जो हतोत्साहित हैं: यहाँ देखें ।
दोष

जवाबों:


6

पर्ल 6 , 55 54 बाइट्स

-1 किंग जोए को धन्यवाद।

{~map({$^b,.base($b)},2..36).min:{@$_+.Set}o*[1].comb}

इसे ऑनलाइन आज़माएं!


1
आप के @$_साथ बदल सकते हैं @_और यह अभी भी काम करता है।
सरबोगमैन

2
@SirBogman यह बहुत कम परीक्षण मामलों के साथ काम करने के लिए होता है।
nwellnhof

यह समझ आता है। यह काफी सही नहीं लगा।
सरबोगमैन

5

पायथन 2 , 150 149 127 144 बाइट्स

lambda n:min((len(c(n,b))+len(set(c(n,b))),b,c(n,b))for b in range(2,37))[1:]
c=lambda n,b,s='':n and c(n/b,b,chr(n%b+48+7*(n%b>9))+s)or s or'0'

इसे ऑनलाइन आज़माएं!


पायथन 3 , 136 बाइट्स

lambda n:min((len((*c(n,b),*{*c(n,b)})),b,c(n,b))for b in range(2,37))[1:]
c=lambda n,b,s='':n and c(n//b,b,chr(n%b+48+7*(n%b>9))+s)or s

इसे ऑनलाइन आज़माएं!


पायथन 3.8 (प्री-रिलीज़) , 131 बाइट्स

lambda n:min((len((*(x:=c(n,b)),*{*x})),b,x)for b in range(2,37))[1:]
c=lambda n,b,s='':n and c(n//b,b,chr(n%b+48+7*(n%b>9))+s)or s

इसे ऑनलाइन आज़माएं!


c आधार 10 नंबर को किसी भी आधार (2-36) में परिवर्तित करता है, और पहला (अनाम) फ़ंक्शन सबसे छोटा परिणाम पाता है।


5

05AB1E , 16 14 बाइट्स

-1 केविन क्रूज़सेन को धन्यवाद

₆LBāøΣнDÙìg}1è

इसे ऑनलाइन आज़माएं!

या आर) जोड़ें »अंत में निर्दिष्ट आउटपुट प्रारूप के अनुरूप करने के लिए, लेकिन अधिकांश अन्य उत्तर परेशान नहीं हुए।

स्पष्टीकरण:

₆L          # range 1..36
  B         # convert the input to each of those bases
   āø       # enumerate (pair each element with its 1-based index)
Σ     }     # sort by
     g      # length
 н          # of the first element
    ì       # concatenated to
  DÙ        # itself, uniquified
1è          # take the second entry (first will always be base 1)

1
-1 बाइट के ₆L©B®øबजाय का उपयोग करके₆LεBy‚}
केविन क्रूज़सेन

1
@KevinCruijssen धन्यवाद! एक और -1 का उपयोग करके ā, ऐसा लगता है कि आप हमेशा उस एक के बारे में भूल जाते हैं।
ग्रिमि

लोल, मैं वास्तव में करता हूं .. मुझे आज इस चुनौती के साथ पहले याद आया, यह नहीं कि इससे किसी भी तरह से मदद मिली, हाहा xD
केविन क्रूज़सेन

@ उत्तर देने से आपको लगता है कि आपने उत्तर नहीं पढ़ा है। मैं एक ऐसे संस्करण को जोड़ता हूं जो सख्त आउटपुट आवश्यकताओं का अनुपालन करता है, और समझाता हूं कि मैंने उस मुख्य संस्करण को क्यों नहीं बनाया।
ग्रिम्मी

@ आरोप के अनुसार गुनहगार। आपको परेशान करने के लिए माफी चाहता हूं।
पुनरावर्ती

4

जावास्क्रिप्ट (ईएस 6),  87 85  101 बाइट्स

संपादित करें: +16 बेकार बाइट्स सख्त आउटपुट प्रारूप का पालन करने के लिए

n=>(g=m=>--b>2?g(m<(v=new Set(s=n.toString(b)).size+s.length)?m:(o=b+' '+s.toUpperCase(),v)):o)(b=37)

इसे ऑनलाइन आज़माएं!


आह, मुझे वह हिस्सा याद आ गया
TFeld

4

जाप v2.0a0 -gS, 24 23 बाइट्स

सुंदर नहीं है, लेकिन यह काम करता है। +2 बाइट्स पूरी तरह से अनावश्यक आवश्यकता के लिए कि आउटपुट अपरकेस हो।

37o2@sX u ¸iXÃñÈÌiXÌâ)l

कोशिश करो

37o2@sX u ¸iXÃñÈÌiXÌâ)l     :Implicit input of integer
37o2                        :Range [2,37)
    @                       :Map each X
     sX                     :  Convert the input to a base-X string
        u                   :  Uppercase
          ¸                 :  Split on spaces (there are none, so this returns a singleton array)
           iX               :  Prepend X
             Ã              :End map
              ñ             :Sort by
               È            :Pass each X through the following function
                Ì           :  Last element of X
                 i          :  Prepend
                  XÌâ       :    Last element of X, deduplicated
                     )      :  End prepend
                      l     :  Length
                            :Implicit output of the first sub-array, joined with spaces

हां, यह अच्छा काम करता है, लेकिन अक्षर बड़े होने चाहिए।
वेर निक कहते हैं

1
@ वीरनिक, क्यों? यह चुनौती के लिए बिल्कुल कुछ नहीं जोड़ता है।
झबरा

... मुझे लगता है कि अगली बात "एक स्थान से अलग हो जाएगी"। लगता है कि आउटपुट प्रारूप को इस चुनौती पर बहुत सख्त बनाया गया है, और टिप्पणियों से ऐसा नहीं लगता है कि यह बदल जाएगा।
जोनाथन एलन

@JonathanAllan, सौभाग्य से मैं ध्वज को बदलने के साथ "ठीक" कर सकता हूं।
झबरा

3

PHP ,124 119 बाइट्स

for($i=36;$b=strtoupper(base_convert($argn,10,--$i));$o[strlen($b.count_chars($b,3))]="$i $b");krsort($o);echo end($o);

इसे ऑनलाइन आज़माएं!

के बारे में एक शर्म की बात है PHP में +12 बाइट्स के कि आउटपुट को बड़ा करना ... लेकिन ... वैसे भी।


3

Zsh , 85 बाइट्स

for b ({36..2})x=$[[#$b]$1]&&x=${x#*\#}&&a[$#x+${#${(us::)x}}]=$b\ $x
a=($a)
<<<$a[1]

लूप के अंदर के बयानों की इस संख्या के लिए, का उपयोग कर ...&&...&&... से कम है {...;...;...;}

for b ({36..2})                   # order decreasing: smaller bases overwrite larger ones
    x=$[[#$b]$1] && \             # set x to [base]#[num] 
    x=${x#*\#} && \               # strip leading [base]#
    a[$#x+${#${(us::)x}}]=$b\ $x  # use score as index to store "[base] [number]"
#            ${(us::) }           # (s::)plit into characters, take (u)nique
a=($a)                            # remove empty elements from array
<<<$a[1]                          # print out the first element (smallest score)

इसे ऑनलाइन आज़माएं!

यहाँ एक 81-बाइट समाधान है जो फॉर्म में प्रिंट करता है [base]#[num] इसके बजाय :

for b ({36..2})x=$[[#$b]$1]&&y=${x#*\#}&&a[$#y+${#${(us::)y}}]=$x
a=($a)
<<<$a[1]

इसे ऑनलाइन आज़माएं!



2

चारकोल , 38 बाइट्स

Nθ≔EE³⁴↨θ⁺²ιL⁺ιΦι⁼λ⌕ικη≔⁺²⌕η⌊ηηIη ↥⍘θη

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

Nθ

पूर्णांक इनपुट करें।

≔EE³⁴↨θ⁺²ι

इसे बेस 2 से बेस 36 में बदलें ...

L⁺ιΦι⁼λ⌕ικη

... समर्पण, संक्षिप्त करें और लंबाई लें।

≔⁺²⌕η⌊ηη

न्यूनतम जटिलता का सूचकांक लें और आधार प्राप्त करने के लिए 2 जोड़ें।

Iη ↥⍘θη

ऊपरी आधार में उस आधार में परिवर्तित आधार और पूर्णांक को प्रिंट करें।


2

स्टैक्स , 19 बाइट्स

Ç╛;ⁿY3█↕(╖S♪*ò▌?½╦l

इसे चलाएं और डीबग करें

कोई फैंसी एल्गोरिदम नहीं, बस सीधा जानवर बल। कार्यक्रम का लगभग एक तिहाई सटीक आउटपुट नियमों के लिए प्रारूपण है।

बोनस कार्यक्रम: [1..1000] के लिए आउटपुट


2

जेली , 25 बाइट्स

bⱮ36µQL+LN)Mḟ1Ḣ,ị‘ịØBʋ¥⁸K

इसे ऑनलाइन आज़माएं!

एक विवादास्पद लिंक एक पूर्णांक को अपने तर्क के रूप में लेता है और वांछित प्रारूप के जेली स्ट्रिंग को लौटाता है। यदि दो-आइटम सूची स्वीकार्य आउटपुट थी (अधिकांश चुनौतियों के अनुसार), तो 2 बाइट्स बचा सकते थे। यदि बेस 1 इनपुट के रूप में 1 के किनारे के मामले के लिए स्वीकार्य था, तो आगे 2 बाइट्स बचा सकता है।






1

वोल्फ्राम भाषा (गणितज्ञ) , 109 111 बाइट्स

Print[a=OrderingBy[#~IntegerDigits~Range@36,Tr[1^#]+Tr[1^Union@#]&,1][[1]]," ",ToUpperCase[#~IntegerString~a]]&

+2: निश्चित किया गया। @Roman को पकड़ने के लिए धन्यवाद

OrderingBy मैथमेटिका 12.0 में पेश किया गया था, जिसे टीआईओ ने अभी तक अपडेट नहीं किया है।


"यदि कई आधार मानदंड के लिए समान मूल्य देते हैं, तो उनमें से सबसे छोटा चुनें।": OrderingByइस आवश्यकता के अनुरूप नहीं है।
रोमन

हो सकता है कि कुछ के साथ MinimalBy, यह पसंद ?
रोमन

@ रोमान ऐसा नहीं करता? जहाँ तक मैं बता सकता हूँ, यह दो सूचकांकों के सापेक्ष क्रम को संरक्षित रखता है जिनका समान मूल्य है ..
2

2
तर्क के साथ 123, आपका समाधान 36 3Fआवश्यक के बजाय प्रिंट करता है 12 A3। जब से OrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]मुझे उत्तर मिला है {36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}, इसलिए बिना किसी री-ऑर्डर के समान प्रविष्टियों की सामान्य धारणा को यहां नजरअंदाज किया गया है। मेरा $Version"मैक ओएस एक्स x86 (64-बिट) (7 अप्रैल, 2019) के लिए 12.0.0 है"।
रोमन

आह, तुम सही हो। यह ध्यान नहीं देने के लिए मेरा बुरा।
attinat

1

सी (क्लैंग) , 165 बाइट्स

n,i=2,j,p=99,r,m,x;char*g,*_,b[74][37];t(n){for(;g=b[i],i<37;r=j<p?_=g,p=j,i:r,++i)for(j=0,m=n;m;m/=i,*--g=x+=x>9?87:48)j+=b[i+36][x=m%i]++?1:2;printf("%i,%s",r,_);}

इसे ऑनलाइन आज़माएं!

n // इनपुट

, i = 2 // आधार 2 से 36 तक चलने वाला

, जे // वर्तमान जटिलता

, पी = 99 // सर्वश्रेष्ठ जटिलता

, आर // परिणाम = पुनरावृत्ति

, एम // अस्थायी प्रतिलिपि एन

, x; // m% i

char * g // करंट स्ट्रिंग ptr

, * _ // सर्वोत्तम str ptr

, ख [74] [37]; // बफर

/ * [३ test + ३ =] = [उपयोग किए गए पात्रों के लिए [तार प्राप्त + परीक्षण] * /

टी (एन) {

के लिए (; जी = बी [i], // कदम ptr

   i<37 ; 
   r=j<p?_=g,p=j,i:r, // save best solution

   ++i){//for every base

for (j = 0, m = n; m; m / = i, // अर्क अंक

   *--g=x+=x>9?87:48)
   // move ptr backward for printf use and transform to ascii value

j + = b [i + 36] [एक्स = मीटर% i] ++ 1: 2; // चरित्र के सापेक्ष वृद्धि बाइट

// और यदि यह 0 वर्णक था, तो उपयोग किए गए नए वर्ण के लिए 2: 1 और अंक की गिनती के लिए 1

// और केवल अंक गिनती + चाल सूचक

// प्रिंटफ ("% s -", ​​जी); // परीक्षण

// printf ("r% ip% ij% i \ n", r, p, j); // परीक्षण

}

printf ( "% i,% s", आर, _); // उत्पादन

}


1
163 बाइट्स को एक से अधिक बार कहा जा सकता है।
छत

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.