बाइनरी में 1 से एक पूर्णांक तक…


13

परिचय:

मुझे याद है, जब मैं एक बच्चा था, मुझे एक कैलकुलेटर मिलता था और +बटन दबाता रहता था, और देखता था कि मैं कितना ऊंचा गिन सकता हूं। अब, मुझे प्रोग्राम करना पसंद है, और मैं iOS के लिए विकसित कर रहा हूं।

गिनती मनुष्य और कंप्यूटर दोनों के लिए एक समान कौशल है। इसके बिना, बाकी गणित नहीं किया जा सकता है। यह बस पर शुरू करके 1और दोहराव 1से इसे जोड़कर किया जाता है।

चुनौती:

यह एक सरल चुनौती है। मैं 1जो कुछ भी Integerकरना चाहता हूं, उसे करने से आपका कार्यक्रम प्रिंट हो जाएगा। हालांकि, मैं इसमें एक मोड़ डालूंगा, क्योंकि दशमलव की गिनती बहुत उबाऊ है:

काउंटिंग बेस 10 में नहीं हो सकती है, इसे बाइनरी में ही काउंटिंग दिखाना होगा।

तो, 32-बिट पूर्णांक का उपयोग करके 5 तक गिनती करने के लिए, यह इस तरह दिखेगा:

0000 0000 0000 0000 0000 0000 0000 0001 ..... 1
0000 0000 0000 0000 0000 0000 0000 0010 ..... 2
0000 0000 0000 0000 0000 0000 0000 0011 ..... 3
0000 0000 0000 0000 0000 0000 0000 0100 ..... 4
0000 0000 0000 0000 0000 0000 0000 0101 ..... 5

यह एक कंप्यूटर है। वे बाइनरी को सबसे अच्छा जानते हैं। आपका इनपुट 32-बिट या 64-बिट पूर्णांक हो सकता है। यह वास्तव में आप पर निर्भर है। हालाँकि, यदि आप 32-बिट पूर्णांक का उपयोग करते हैं, तो आपका आउटपुट बाइनरी में 32-बिट पूर्णांक होना चाहिए , और यदि आप 64-बिट पूर्णांक का उपयोग करते हैं, तो आपका आउटपुट बाइनरी में 64-बिट पूर्णांक होना चाहिए ।

नमूना इनपुट:

32-बिट पूर्णांक, 5

नमूना उत्पादन:

0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0101

स्कोरिंग:

आपका स्कोर हालांकि आपके कोड है कई बाइट्स के बराबर है। जैसा कि यह कोड गोल्फ है, सबसे कम स्कोर जीतता है।

बोनस अंक:

यदि आप दिखाते हैं कि आउटपुट में, यह संख्या आधार 10 संख्या के रूप में है (उदाहरण के लिए, 0000 0000 0000 0000 0000 0000 0000 0001बाइनरी में आधार 10 के बराबर 1), अपने स्कोर को गुणा करें 0.8

यदि आप मेरे द्वारा किए गए आउटपुट के 4 अंकों का समूह बनाते हैं, तो अपने स्कोर को 0.8(फिर से) गुणा करें । यह आवश्यक नहीं है।

राउंड अप मत करो, और नीचे राउंड मत करो। आपका स्कोर एक फ़्लोटिंग-पॉइंट नंबर है।

सौभाग्य!


क्या आपको अंकों को चार अलग-अलग स्थानों से अलग करके रखना है?
xnor

@xnor No. मैंने पठनीयता के लिए किया था, लेकिन मैं इसके लिए एक बोनस अवसर भी शामिल करूंगा।
DDPWNAGE

क्या होगा यदि मैं एक डेटा प्रकार का उपयोग करता हूं जो कि अनबाउंड आकार का है ( intउदाहरण के लिए पायथन 3 )?
इसाॅग

@isaacg निर्दिष्ट करें कि क्या आपका प्रोग्राम 32 या 64-बिट पूर्णांक का उपयोग करता है। आपको उन पूर्णांकों के लिए समायोजित करने की आवश्यकता नहीं है जो सीमा से बाहर हैं; आपको केवल वही इनपुट करना होगा जो आप इनपुट करते हैं। दूसरे शब्दों में, चुनाव आपका है।
DDPWNAGE

4
क्या होगा यदि हमारी लैंगगॉव कुछ अलग का उपयोग करती है, जैसे 30 बिट पूर्णांक (हस्केल) या मनमाने ढंग से सटीक पूर्णांक (जे)?
FUZxxl

जवाबों:


14

एपीएल, 10 वर्ण

एपीएल में एक और। मान लेता है ⎕IO←1(डिफ़ॉल्ट)। कोई बोनस अंक नहीं। इनपुट डिवाइस से नंबर पढ़ता है। यदि आपका एपीएल 32 बिट पूर्णांक के बजाय 64 बिट पूर्णांक का उपयोग करता है, तो 64 को 32 के लिए आवश्यक के रूप में स्थानापन्न करें।

ध्यान दें कि पूर्णांक की सीमा पार होने पर APL पारदर्शी रूप से फ़्लोटिंग पॉइंट नंबरों में परिवर्तित हो जाता है। यह कहना मुश्किल है कि पूर्णांक आकार APL किसके साथ काम करता है।

⍉(32⍴2)⊤⍳⎕

व्याख्या

2          ⍝ the number 2
32⍴2       ⍝ a vector of 32 twos.
(32⍴2)⊤X   ⍝ X represented as base 2 to 32 digits precision
⍳X         ⍝ a vector of the integers from 1 to X
⎕          ⍝ a number queried from the terminal
(32⍴2)⊤⍳⎕  ⍝ the output we want, flipped by 90°
⍉(32⍴2)⊤⍳⎕ ⍝ the output we want in correct orientation (⍉ is transpose)

ऐसा लगता है कि मुझे 4 समूहों को पाने के लिए इतनी मेहनत नहीं करनी चाहिए थी
प्रोटॉन

@protist बोनस अंक प्राप्त करने की कोशिश न करें जो लागू करने के लिए बहुत कठिन हैं। यह लगभग प्रयास के लायक नहीं है।
FUZxxl

प्रश्न विशेष रूप से चरित्र के बजाय एक बाइट गिनती के लिए पूछा गया है, स्कोर 20 बाइट्स होना चाहिए।
आख-मोर्पोर्क

@ dohaqatar7 APL ( कोडपेज 907 की तरह ) के एन्कोडिंग हैं जो पूरे एपीएल वर्ण को एक बाइट में सेट करते हैं। कुछ एपीएल एक्सटेंशन हैं जिन्हें पारंपरिक एपीएल कोड पृष्ठों के साथ एन्कोड नहीं किया जा सकता है, लेकिन मैं उनमें से किसी का भी उपयोग नहीं करता हूं।
फ़ूजएक्सएक्सएल

7

जावास्क्रिप्ट ( ईएस 6 ) 56.8 (71 * 0.8)

32 बिट संस्करण, चूंकि जावास्क्रिप्ट 64 बिट परिशुद्धता को संभाल नहीं सकता है (फ्लोटिंग पॉइंट डबल्स का उपयोग करके 53 बिट्स पर)

बिना समूह के

f=n=>{for(i=0;i++<n;)console.log((8*(8<<26)+i).toString(2).slice(1),i)} 

समूहन के साथ - स्कोर 60.16 (94 * .64)

f=n=>{for(i=0;i++<n;)console.log((8*(8<<26)+i).toString(2).slice(1).match(/..../g).join` `,i)}

किसी भी ब्राउज़र में परीक्षण (ES5)

function f(n)
{
  for(i=0;i++<n;)console.log((8*(8<<26)+i).toString(2).substr(1).match(/..../g).join(' '),i)
}

// Test
console.log = function(x,y) { O.innerHTML += x+' '+y+'\n' }
Count to: <input id=I><button onclick="O.innerHTML='';f(+I.value)">-></button>
<pre id=O></pre>


6

पायथ, 18 * 0.8 * 0.8 = 11.52 बाइट्स

VSQjd+c.[64.BN\04N

उदाहरण आउटपुट:

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 1
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 2
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011 3
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 4
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0101 5
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0110 6
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0111 7
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000 8
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1001 9
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010 10

2
@DDPWNAGE अन्य लोगों को जवाब स्वीकार करने से पहले प्रतिस्पर्धा करने के लिए कुछ समय दें :)
orlp

ठीक है, मैं इसे अस्थायी रूप से स्वीकार करने के बारे में सोच रहा था, इसलिए लोगों को पता है कि क्या पीटना है।
DDPWNAGE

2
@DDPWNAGE याद रखें कि एक उत्तर को स्वीकार करने और कुछ घंटों तक प्रतीक्षा करने के बाद आप आसानी से उत्तर को अस्वीकार नहीं कर सकते।
FUZxxl

4

पायथ, 19 * 0.8 * 0.8 = 12.16 बाइट्स

VSQjd+cjk.[032.BN4N

इनपुट 5 के लिए उदाहरण आउटपुट:

0000 0000 0000 0000 0000 0000 0000 0001 1
0000 0000 0000 0000 0000 0000 0000 0010 2
0000 0000 0000 0000 0000 0000 0000 0011 3
0000 0000 0000 0000 0000 0000 0000 0100 4
0000 0000 0000 0000 0000 0000 0000 0101 5

प्रदर्शन।


4

पायथन 2, 48 * 0.8 = 38.4

i=0;exec"i+=1;print format(i,'032b'),i;"*input()

एक संख्या को बाइनरी में कनवर्ट करता है, इसे 32 अंकों के साथ बाइनरी में बदलने के लिए स्ट्रिंग फॉर्मेटिंग का उपयोग करता है, और फिर बोनस के लिए दशमलव संख्या भी प्रिंट करता है। इनपुट मूल्य execसे वेतन वृद्धि के लिए एक लूप का उपयोग करता है 1


अच्छा समाधान! मुझे विश्वास नहीं है कि यह निर्दिष्ट किया गया था, लेकिन यह 32-बिट रेंज में बड़ी संख्या में विफल हो जाएगा OverflowError: repeated string is too long:। यकीन नहीं है कि अगर यह सिर्फ मेरी मशीन पर एक सीमा है।
केड


4

एपीएल, 23.68 (37 × .8 × .8)

{⎕←(⍕⍵),⍨⊃,/,/' ',⍨⍕¨8 4⍴(32⍴2)⊤⍵}¨⍳⎕

3

केडीबी (क्यू), 50 * 0.8 * 0.8 = 32

मुझे अपनी अधीनता से थोड़ा दुःख होता है :( ऐसा करने का एक बेहतर तरीका होना चाहिए!

{-1{" "sv raze@'string(0N 4#0b vs x),x}@'1+til x;}

व्याख्या

                                         1+til x     / counting
   {                                  }@'            / lambda each
                      (0N 4#0b vs x),x               / convert to binary and join with input
    " "sv raze@'string                               / convert to string, concatenate each string and join with space
{-1                                             ;}   / print and surpress output in lambda

परीक्षा

q){-1{" "sv raze@'string(0N 4#0b vs x),x}@'1+til x;}5
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 1
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 2
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011 3
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 4
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0101 5

2
अच्छी तरह से आप कश्मीर में छोड़ सकते हैं;)k){-1{" "/:,/'$:(0N 4#0b\:x),x}@'1+!x}
प्रोटेस्ट जूल

3

आम लिस्प, 96.0

स्कोर: (* 150 .8 .8)

(lambda(y)(flet((p(n &aux(x(format()"~39,'0b ~:*~d"n)))(dolist(p'(4 9 14 19 24 29 34))(setf(aref x p)#\ ))(princ x)(terpri)))(dotimes(i y)(p(1+ i)))))

उदाहरण

10 के साथ फ़ंक्शन को कॉल करना:

0000 0000 0000 0000 0000 0000 0000 0001 1
0000 0000 0000 0000 0000 0000 0000 0010 2
0000 0000 0000 0000 0000 0000 0000 0011 3
0000 0000 0000 0000 0000 0000 0000 0100 4
0000 0000 0000 0000 0000 0000 0000 0101 5
0000 0000 0000 0000 0000 0000 0000 0110 6
0000 0000 0000 0000 0000 0000 0000 0111 7
0000 0000 0000 0000 0000 0000 0000 1000 8
0000 0000 0000 0000 0000 0000 0000 1001 9
0000 0000 0000 0000 0000 0000 0000 1010 10

व्याख्या

(format()"~39,'0b ~:*~d" #b101010101010) देता है:

"000000000000000000000000000101010101010 2730"

मध्यवर्ती स्ट्रिंग (एक सरणी) को निम्नलिखित शून्य-आधारित सूचकांकों में एक अंतरिक्ष वर्ण डालने के लिए संशोधित किया गया है: 4 9 14 19 24 29 34. फिर इसे मुद्रित किया जाता है।

ध्यान दें कि स्पष्ट रूप से सीधा (format t"~39,'0,' ,4:b ~:*~d" #b101010101010)प्रारूप वह नहीं करता है जो हम चाहते हैं। यह प्रिंट करता है:

00000000000000000000000001010 1010 1010 2730

(पेडिंग 4 द्वारा समूहीकृत नहीं है)



3

सी, 97 * 0.8 * 0.8 = 62.08

a,x;main(b){for(scanf("%u",&b);a++<b;printf("%d\n",a))for(x=32;x--;)printf("%*d",x%-4-2,a>>x&1);}

इनपुट "5" के लिए उदाहरण आउटपुट:

0000 0000 0000 0000 0000 0000 0000 0001 1
0000 0000 0000 0000 0000 0000 0000 0010 2
0000 0000 0000 0000 0000 0000 0000 0011 3
0000 0000 0000 0000 0000 0000 0000 0100 4
0000 0000 0000 0000 0000 0000 0000 0101 5
0000 0000 0000 0000 0000 0000 0000 0110 6
0000 0000 0000 0000 0000 0000 0000 0111 7
0000 0000 0000 0000 0000 0000 0000 1000 8
0000 0000 0000 0000 0000 0000 0000 1001 9

मैं द्विआधारी संख्याओं से दशमलव संख्याओं को अलग करने के लिए एक और व्हाट्सएप चरित्र जोड़ सकता हूं, लेकिन तकनीकी रूप से समस्या की आवश्यकता नहीं है, मुझे लगता है? संपादित करें: धन्यवाद, सीएल!


1
संयोग से आप बाइनरी और दशमलव के बीच की जगह को बिना किसी अतिरिक्त बाइट लागत के x%-4-1साथ x%-4-2जोड़ सकते हैं । (यह भी प्रत्येक पंक्ति की शुरुआत में अतिरिक्त स्थान से छुटकारा
दिलाएगा

2

अष्टक, 23 वर्ण

dec2bin(1:input(""),32)

इनपुट 5 के लिए उदाहरण आउटपुट:

ans =
00000000000000000000000000000001
00000000000000000000000000000010
00000000000000000000000000000011
00000000000000000000000000000100
00000000000000000000000000000101

2

मतलाब, 19 बाइट्स

@(x)dec2bin(1:x,32)

इस एक के लिए बहुत अधिक नहीं, MatLab में एक द्विआधारी कनवर्टर में दशमलव में बनाया गया है और स्वचालित रूप से परिणाम प्रिंट करता है।


1
यह 32-बिट / 64-बिट पूर्णांक मुद्रित नहीं करता है।
user0815

क्षमा करें, सिर के लिए धन्यवाद। मैंने तदनुसार कोड बदल दिया है।
रॉबी

यह उत्तर ऑक्टेव उत्तर के लगभग समान है ।
एलेक्स ए।

2

जूलिया, 42 बाइट्स

यह बोनस के बिना थोड़ा कम है।

n->for i=1:n println(lpad(bin(i),64,0))end

यह एक अनाम फ़ंक्शन बनाता है जो पूर्णांक लेता है और प्रत्येक संख्या के बाइनरी प्रतिनिधित्व को 1 से n तक प्रिंट करता है , प्रत्येक बाएं शून्य से 64 अक्षरों के साथ गद्देदार होता है।


बोनस के साथ, 78 बाइट्स * 0.8 * 0.8 = 49.92

n->for i=1:n for j=1:4:64 print(lpad(bin(i),64,0)[j:j+3]*" ")end;println(i)end

यह एक अनाम फ़ंक्शन बनाता है जो पूर्णांक लेता है और पहले की तरह द्विआधारी प्रतिनिधित्व को प्रिंट करता है, इस बार अंत में बेस 10 में संख्या के साथ 4 के समूहों में विभाजित होता है।


2

आम लिस्प, स्कोर: 64.0

100 बाइट्स * 0.8 * 0.8

मैं अपने स्कोर से बहुत खुश हूं, लेकिन मुझे अभी भी लगता है कि मेरे कोड को थोड़ा सरल बनाने की संभावना होनी चाहिए।

उत्पादन

0000 0000 0000 0000 0000 0000 0000 0001  1
0000 0000 0000 0000 0000 0000 0000 0010  2
0000 0000 0000 0000 0000 0000 0000 0011  3
0000 0000 0000 0000 0000 0000 0000 0100  4
0000 0000 0000 0000 0000 0000 0000 0101  5
0000 0000 0000 0000 0000 0000 0000 0110  6
0000 0000 0000 0000 0000 0000 0000 0111  7
0000 0000 0000 0000 0000 0000 0000 1000  8
0000 0000 0000 0000 0000 0000 0000 1001  9
0000 0000 0000 0000 0000 0000 0000 1010  10

कोड

(defun r(n)(dotimes(i n)(format t"~{~a~a~a~a ~}~a~%"(coerce(format()"~32,'0B"(1+ i))'list)(1+ i))))

व्याख्या

जैसा कि coredump के उत्तर में वर्णित है , प्रारूप स्ट्रिंग

"~32,'0B"

base2 संख्याओं का उत्पादन करता है, लेकिन साथ ही समूहीकरण प्राप्त करने की कोई संभावना नहीं है। इसलिए मैं विवश इस प्रारूप तार के साथ 4 के समूह चुनने के द्वारा इस पर एक सूची में स्ट्रिंग और दोहराएं:

"~ {~ एक ~ एक ~ एक ~} ~ एक ~%"

4 के प्रत्येक समूह के बाद एक रिक्त है, और अंतिम समूह के बाद, बेस 10 नंबर मुद्रित होता है।

बिना समूह के (60x0.8 => 48.0)

(defun r(n)(dotimes(i n)(format t"~32,'0B ~:*~a~%"(1+ i))))

यह (एकल) प्रारूप तर्क को फिर से संसाधित करने के लिए ~: * का उपयोग करता है।


1

PHP, 51.84 (81 × .8 × .8)

32-बिट संस्करण, जैसा कि OS 64-बिट है, चाहे PHP केवल Windows पर 32-बिट तक सीमित है।

एक कमांड लाइन तर्क देता है।

for($i=0;$i++<$argv[1];)echo chunk_split(str_pad(decbin($i),32,0,0),4," ")."$i\n";

1

कॉफीस्क्रिप्ट, 60.8 (76 × 8)

ऊपर बताए गए कारणों के लिए 32-बिट संस्करण , चूंकि कॉफीस्क्रिप्ट जावास्क्रिप्ट के लिए नीचे संकलित है।

f=(x)->console.log(("0".repeat(32)+i.toString 2).slice(-32),i)for i in[1..x]

समूहीकरण के साथ यह थोड़ा लंबा हो जाता है: 64.64 (101 × .8 × .8)

f=(x)->console.log(("0".repeat(32)+i.toString 2).slice(-32).match(/.{4}/g).join(" "),i)for i in[1..x]

1

हास्केल, 56 बाइट्स

f n=putStr$unlines$take n$tail$sequence$replicate 32"01"

उपयोग:

*Main> f 5 
00000000000000000000000000000001
00000000000000000000000000000010
00000000000000000000000000000011
00000000000000000000000000000100
00000000000000000000000000000101

64 बिट के लिए, के 32साथ बदलें 64। हर दूसरे नंबर काम करता है, भी।


1

जे, 20 बाइट्स

(32#2)#:>:i.".1!:1<1

नमूना इनपुट और आउटपुट:

3
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1

1

स्विफ्ट: 98.56 (154 * 0.8 * 0.8)

for x in 1...Int(Process.arguments[1].toInt()!){var p=String(x,radix:2)
let q=count(p)
for i in 0..<32-q{p=(((q+i)%4==0) ?"0 ":"0")+p}
println("\(p) \(x)")}

1

रूबी, 64 बिट

70 * 0.8 * 0.8 = 44.8 बाइट्स (विभाजित, दशमलव)

1.upto(gets.to_i){|i|puts ("%064d"%i.to_s 2).scan(/.{4}/)*?\s+" #{i}"}

51 * 0.8 = 40.8 बाइट्स (दशमलव)

1.upto(gets.to_i){|i|puts "%064d"%i.to_s(2)+" #{i}"}

67 * 0.8 = 53.6 बाइट्स (विभाजित)

1.upto(gets.to_i){|i|puts "%064d"%i.to_s(2).scan/.{4}/}

44 बाइट्स (कोई बोनस नहीं)

1.upto(gets.to_i){|i|puts "%064d"%i.to_s(2)}

1

05AB1E , 13 11 बाइट्स

Lb32jsäð0:»

-2 बाइट्स @ Mr.Xcoder को धन्यवाद ।

अंतरिक्ष-सीमांकक के बिना आउटपुट और न ही अनुक्रम-संख्या।

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

स्पष्टीकरण:

L              # List of range [1,input]
               #  i.e. 5 → [1,2,3,4,5]
 b             # Convert each to a binary string
               #  i.e. [1,2,3,4,5] → ['1','10','11','100','101']
  32j          # Join everything together with a minimum length per item of 32,
               # which basically prepends spaces to make it length 32
               #  i.e. ['1','10','11','100','101'] → '                               1                              10                              11                             100                             101'
     sä        # Split it into the input amount of parts
               #  i.e. 5 → ['                               1','                              10','                              11','                             100','                             101']
       ð0:     # Replace every space with a 0
               #  i.e. '                             101' → '00000000000000000000000000000101'
          »    # Join everything together by newlines (and output implicitly)

1
Lb32jsäð0:»11 बाइट्स के लिए काम करता है
श्री एक्सकोडर

@ Mr.Xcoder धन्यवाद, पूरी तरह से उपयोग jकरने के बारे में भूल गया ताकि यह सही लंबाई बन जाए।
केविन क्रूज़सेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.