२ की शक्तियाँ


31

चुनौती

पूर्णांक इनपुट को देखते हुए , xजहां 1 <= x <= 255दो की शक्तियों के परिणाम लौटाए, जब सम्मन दे x

उदाहरण

इनपुट दिया:

86

आपका कार्यक्रम आउटपुट होना चाहिए:

64 16 4 2

इनपुट:

240

आउटपुट:

128 64 32 16

इनपुट:

1

आउटपुट:

1

इनपुट:

64

आउटपुट:

64

यदि राशि में दो की निश्चित शक्ति मौजूद नहीं है, तो आउटपुट में शून्य हो सकता है।

उदाहरण के लिए, इनपुट 65आउटपुट हो सकता है 0 64 0 0 0 0 0 1

स्कोरिंग

यह , इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है।


5
क्या सूची को उच्चतम से सबसे कम क्रमबद्ध किया जाना है?
20

2
क्या हम कुछ निरर्थक शून्य का उत्पादन कर सकते हैं?
जोनाथन एलन

4
RE: "सबसे कम से सबसे ज्यादा छांटा गया" एक प्रतिबंध क्यों है जो चुनौती का हिस्सा नहीं था और सबसे मौजूदा उत्तरों को अमान्य करता है? (इसके अलावा छोटे एंडियन के बारे में क्या?) + यह मेरे पायथन जवाब को अमान्य कर देता है क्योंकि सेट के पास कोई आदेश नहीं है।
जोनाथन एलन

5
@JonathanAllan मैंने प्रतिबंध हटा दिया है। अगली बार जब मैं एक और सवाल रखूंगा तो मैं इसे ध्यान में रखूंगा - मैं अभी भी इसके लिए काफी नया हूं। :)
SpookyGengar

6
मुझे लगता है कि आप यह बताना चाहते हैं कि दो में से किसी भी शक्ति का उपयोग केवल एक बार किया जा सकता है। अन्यथा कोई व्यक्ति इनपुट 1 के लिए "1 1 1" का उत्पादन कर सकता था
उल्लू पर काले उल्लू काई

जवाबों:


38

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

f=n=>n?[...f(n&~-n),n&-n]:[]

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


9
आप पूरी दुनिया में एकमात्र व्यक्ति हैं जो मुझे जावास्क्रिप्ट उत्तर दे सकते हैं!
सर्जियोल

4
@sergiol, आप सामान्य रूप से जेएस समाधान क्यों नहीं करेंगे? एक अच्छा समाधान उस भाषा का उपयोग किए बिना एक अच्छा समाधान है या जिसने इसे पोस्ट किया है।
शैगी

@ शागिर्गी क्योंकि अरनवल्ड ऐसे जावास्क्रिप्ट समाधान करने वाले एकमात्र व्यक्ति हैं। उनके जवाब शुद्ध प्रतिभा वाले हैं!
सर्जियोल

3
@sergiol तारीफ के लिए धन्यवाद, लेकिन यह बिल्कुल सच नहीं है। मैं अधिक चतुर उत्तरों द्वारा नियमित रूप से बहिर्गमन कर रहा हूं - और यही इस साइट के बारे में है। ^^
Arnauld

@ मुझे यकीन नहीं है। ऐसा लगता है कि अग्रणी शून्य (128 से पहले) निषिद्ध हैं। अन्यथा, दूसरा संभावित संस्करण है f=n=>n&&f(n&~-n)+[,n&-n]
अरनौल


12

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

-2 क्योंकि हम 2 की अप्रयुक्त शक्तियों के स्थान पर शून्य उत्पादन कर सकते हैं :)

Ḷ2*&

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

कैसे?

Ḷ2*& - Link: integer, n         e.g. 10
Ḷ    - lowered range of n            [  0,  1,  2,  3,  4,  5,  6,  7,  8,  9]
 2*  - two to the power of           [  1,  2,  4,  8, 16, 32, 64,128,256,512]
   & - bit-wise and                  [  0,  2,  0,  8,  0,  0,  0,  0,  0,  0]

11

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

BUT’2*

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

व्याख्या

लेकिन यहाँ एक स्पष्टीकरण है (ध्यान दें: मैंने मान लिया था कि हम केवल 2 स्वयं की शक्तियों का उत्पादन कर सकते हैं और कुछ नहीं):

BUT’2* – Monadic link. Takes a number N as input. Example: 86
B      – Convert N to binary.                              [1, 0, 1, 0, 1, 1, 0]
 U     – Reverse.                                          [0, 1, 1, 0, 1, 0, 1]
  T    – Truthy indices.                                   [2, 3, 5, 7]
   ’   – Decrement.                                        [1, 2, 4, 6]
    2* – Raise 2 to that power.                            [2, 4, 16, 64]

"सबूत" कि यह सही ढंग से काम करता है। एक पूर्णांक के मानक प्रतिनिधित्व एक्स आधार 2 में एक सूची है {x1,एक्स2,एक्स3,,एक्सn} , जहां एक्समैं{0,1},मैं1,n¯ , जैसे कि:

एक्स=Σमैं=1nएक्समैं2n-मैं
सूचकांकमैं ऐसा है किएक्समैं=0 स्पष्ट रूप से कोई योगदान है इसलिए हम केवल उन ऐसी है कि खोजने में रुचि रखते हैंएक्समैं=1 । घटाकर के बाद सेमैं सेn सुविधाजनक (दो की शक्तियों सभी फार्म के एक्स्पोनेंट्स नहीं हैn-मैं , जहांमैं एक के किसी भी सूचकांक है1 ), इस सूची में सत्य सूचकांकों को खोजने के बजाय हम इसे उल्टा करते हैं और फिर उन्हें "पीछे की ओर" पाते हैंUT। अब जब हमें सही सूचकांक मिल गए हैं तो हमेंउन शक्तियों को2 करना होगा।


1
"एएससीआईआई-ओनली" वहां डरपोक ...
एरिक आउटगॉल्फ

1
@EriktheOutgolfer मुझे लगता है BUT2*Hकि हालांकि काम करेगा।
श्री एक्सकोडर २ Mr.

1
सुंदर प्रभावशाली है कि 302231454903657293676544. की एक इनपुट के साथ इस काम करता है
माइकल करस


8

एपीएल (Dyalog विस्तारित) , 7 बाइट्स SBCS

बेनामी tacit उपसर्ग समारोह। 0-आधारित अनुक्रमण ( ⎕IO←0) की आवश्यकता है।

2*⍸⍢⌽⍤⊤

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

2 दो
* की घात ɩ ndices जहां सच  जबकि  उलट  के  द्विआधारी प्रतिनिधित्व





8

स्लेजहैमर 0.2, 3 बाइट्स

⡔⡸⢣

में घट जाती है {intLiteral[2],call[NumberExpand,2]}

स्लेजहैमर एक पृष्ठ पृष्ठ के रूप में ब्रेल का उपयोग करके वुल्फराम भाषा कोड के लिए एक कंप्रेसर है। उपरोक्त का वास्तविक आकार 2.75 बाइट्स है, लेकिन मेटा पर वर्तमान नियमों के कारण, निकटतम बाइट को पैडिंग कोड आकार में गिना जाता है।


2
हुह! नीट छोटी भाषा, और सभी वर्ण वास्तव में प्रिंट करने योग्य हैं।
LegionMammal978

और अब मेरे मन से पीटर गेब्रियल गीत नहीं निकल सकता ...
डिजिटल ट्रामा

8

05AB1E , 3 बाइट्स

Ýo&

पोर्ट @JonathanAllan के जेली जवाब है , तो उसे बनाए रखने के लिए सुनिश्चित करें!

शून्य (लोडिंग शून्य के लोड सहित) शामिल हैं।

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

Ý      # Create a list in the range [0, (implicit) input]
       #  i.e. 15 → [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
       #  i.e. 16 → [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
 o     # Take 2 to the power of each value
       #  → [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768]
       #  → [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536]
  &    # Bitwise-AND each value with the (implicit) input
       # 15 → [1,2,4,8,0,0,0,0,0,0,0,0,0,0,0,0]
       # 16 → [0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0]
       # (and output the result implicitly)

1
... क्या?! कभी भी ईमानदारी से bitwise andओसबी में इस्तेमाल नहीं देखा गया। अच्छा है।
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn मैं वास्तव में भी अक्सर इसका इस्तेमाल नहीं करता। यहां तक ​​कि मेरे द्वारा उपयोग किए गए किसी भी अन्य उत्तर को भी नहीं पा सकते हैं &। एक्सडी मैंने कई बार बिटवाइज़-एक्सओआर का उपयोग किया है, जैसे कि यहाँ या यहाँ और बिटवाइज़-नॉट एक बार यहाँ (जिसे मैंने बाद में फिर से गोल्फिंग के बाद हटा दिया ..)। मैं जावा में अक्सर बिटवाइंड- AND, XOR, OR, NOT, SHIFT इत्यादि का उपयोग करता हूं, लेकिन 05AB1E में इतना अधिक है। :)
केविन क्रूज़सेन



7

आर , 27 23 बाइट्स

bitwAnd(scan(),2^(7:0))

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

अनियंत्रित कोड और स्पष्टीकरण:

A = scan()         # get input number A from stdin
                   # e.g. A = 65

bitwAnd( A , 2^(7:0))  # bitwise AND between all powers of 2 : 2^7 ... 2^0 and A
                       # and implicitly print the result
                       # e.g. B = bitwAnd(65, c(128,64,32,16,8,4,2,1)) = c(0,64,0,0,0,0,0,1)
  • 4 बाइट्स @Kirill L का धन्यवाद।

1
23 बिट्स के साथ बिटवाइज़ और।
किरिल एल।

@KirillL: शानदार!
१०:१६ बजे digEmAll

7

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 29 बाइट्स

5 अनपेक्षित वर्ण शामिल हैं।

n=>"€@ ".Select(a=>a&n)

व्याख्या

//Lambda taking one parameter 'n'
n=>
//String with ASCII characters 128, 64, 32, 16, 8, 4, 2, and 1
"€@ "
//Iterate through all the chars of the above string and transform them to
.Select(a=>
//A bitwise AND operation between the integer value of the current char and the input value
a&n)

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


लेकिन हमें शून्य से छुटकारा पाने की आवश्यकता है, जैसे n=>new int[8].Select((j,i)=>1<<i&n).Where(i=>i!=0)कि पहले Whereका हिस्सा पांच बाइट्स से छोटा है btw
polfosol 29_

@polfosolThe output may contain zeros
जो राजा

2
@JoKing स्टिल, n=>new int[8].Select((j,i)=>1<<i&n)35 बाइट्स लंबा है और हमें अतिरिक्त झंडे और टेक्स्ट एनकोडिंग की आवश्यकता नहीं होगी।
पोलफोसोल ఠ_ఠ

1
Ascii वर्ण का उपयोग करते हुए 0-4 को छोटा होना चाहिए, उदाहरण के लिए, n=>"INSERT ASCII HERE".Select(a=>1<<a&n)लेकिन मैं एक ऐसे मोबाइल डिवाइस पर हूं जो unprintables को प्रदर्शित या टाइप नहीं कर सकता है, इसलिए मुझे जवाब अपडेट करने के लिए घर पहुंचने तक इंतजार करना होगा
इग्नोरेंस का अवतार

6


1
विफल रहता है आदानों के लिए 1, 2, 4, 8, 16, आदि ( x>yहोना चाहिए x>=yबजाय)।
केविन क्रूज़सेन

1
@ASCIIOnly - मैं आपको बता रहा हूं, रेंज ऑपरेटर मधुर होने जा रहा है :)
दाना

@ ASCII-केवल मीन जबकि, आप ध्वज का उपयोग कर सकते /u:System.Linq.Enumerableहैं और कोशिश यह 31 बाइट्स के लिए
अज्ञान की अवतार

@EmbodimentofIgnorance यकीन है। लेकिन मैं भाषा को "C # /u:System.Linq.Enumerable" के रूप में सूचीबद्ध नहीं करना पसंद करूंगा : P
ASCII-only





5

सी (क्लैंग) , 133 110 63 58 बाइट्स

58-बाइट समाधान @ceilingcat के लिए धन्यवाद

x=256;main(y){for(scanf("%d",&y);x/=2;)printf("%d ",y&x);}

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


C89 में, आप पसंद कर सकते हैं main(){}और वापसी प्रकार intaults करने के लिए। वैश्विक दायरे में चरों के लिए समान। इसके अलावा, कम से कम सामान्य कार्यान्वयन पर जैसे कि क्लैंग, प्रिंटफ और स्कैनफ प्रोटोटाइप के बिना काम करते हैं। आपको निश्चित रूप से चेतावनी मिलती है, लेकिन यह अभी भी वैध C89 (हो सकता है) या कम से कम K & R C के लिए उन्हें स्पष्ट रूप से घोषित किया जाए। सी वाली विभिन्न प्रकार की आर्ग परिभाषित करता है कि वे किस तरह से पारित कर दिया रहे हैं के रूप में पारित वस्तुओं, तो एक char*और int*x86-64 या कुछ भी पर 32-बिट की ओर इशारा छोटा बिना होगा बस काम। (डिफॉल्ट लॉजिक प्रमोशन होते हैं, वैसा ही जैसा कि वैरिएड फ़ंक्शंस के लिए होता है।)
पीटर कॉर्ड्स

या यह बिना किसी अपरिभाषित व्यवहार के साथ वैध C11 होने का लक्ष्य है? यदि हां, तो गर्व से इसकी घोषणा करें। :) और BTW, एक अरग के रूप में एक आउटपुट ऐरे को लेने वाले फ़ंक्शन को लिखना शायद छोटा होगा। वैसे भी, सी में पीटरिंग के लिए टिप्स
पीटर कॉर्डेस

&अगर थोड़ा सा सेट किया गया है, तो आप जाँच करने के लिए बिटवाइज़ का उपयोग कर सकते हैं । की तरह y&(1<<x)&&printf("%d ",1<<x);। या शून्य को छोड़ना नहीं है, बस printf("%d ", y&(1<<x))। या बिट स्थिति को गिनने के बजाय, मास्क का उपयोग करें x=256और x>>=1शिफ्ट करें। main(y){int x=256;for(scanf("%d",&y);x>>=1;)printf("%d ",y&x);}63 बाइट्स इसे ऑनलाइन आज़माएं! क्लैंग यहां तक ​​कि संकलन करेगा-std=c11
पीटर कॉर्ड्स


4

MATL , 5 बाइट्स

BPfqW

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

व्याख्या

86उदाहरण के रूप में इनपुट पर विचार करें ।

B    % Implicit input. Convert to binary (highest to lowest digits)
     % STACK: [1 0 1 0 1 1 0]
P    % Flip
     % STACK: [0 1 1 0 1 0 1]
f    % Find: indices of nonzeros (1-based)
     % STACK: [2 3 5 7]
q    % Subtract 1, element-wise
     % STACK: [1 2 4 6]
W    % Exponential with base 2, element-wise. Implicit display
     % STACK: [2 4 16 64]

4

पर्ल 6 , 16 12 बाइट्स

जोनाथन एलन को -4 बाइट्स धन्यवाद

*+&2**all ^8

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

8 तत्वों के साथ एक ऑल जंक्शन लौटाता है। यह वापसी के बजाय एक गैर-मानक तरीका है, लेकिन आम तौर पर, Junctions आदेश के रूप में कार्य कर सकता है (कम से कम जब तक ऑटोट्रिंग को लागू नहीं किया जाता है) सूचियां और एक से मूल्यों को निकालना संभव है।

स्पष्टीकरण:

*+&              # Bitwise AND the input with
   2**           # 2 raised to the power of
      all ^8     # All of the range 0 to 7

4

जाप, 8 5 बाइट्स

Æ&2pX

कोशिश करो

Æ&2pX     :Implicit input of integer U
Æ         :Map each X in the range [0,U)
 &        :  Bitwise AND of U with
  2pX     :  2 to the power of X

विकल्प

ध्वज का उपयोग करके आउटपुट में s से बचने के लिए ओलिवर द्वारा सुझाया गया ।0-mf

N&2pU

कोशिश करो

N&2pU     :Implicitly map each U in the range [0,input)
N         :The (singleton) array of inputs
 &        :Bitwise AND with
  2pX     :2 to the power of U
          :Implicitly filter and output

1
अच्छा है। आप क्या कर सकते हैं N&2pUके साथ -mfसे बचने के लिए 0रों
ओलिवर

4

05AB1E , 9 बाइट्स

Ýoʒ›}æʒOQ

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


यह 6-बाइट्स के लिए भी सही है, लेकिन यह 86 के लिए TIO पर समय पर पूरा नहीं होता है:

05AB1E , 6 बाइट्स

ÝoæʒOQ

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


1
आपके दोनों उत्तर के लिए एक खाली सेट का उत्पादन करते हैं 15, इसके बजाय[1,2,4,8]
केविन क्रूज़सेन

1
@ केविनक्रूजसेन की जरूरत 2**0, अच्छा कैच। Ýखत्म हो गया L
मैजिक ऑक्टोपस Urn

1
आह, मैं भावना को जानता हूं। इसके अलावा मेरे जवाब में पहले के Lबजाय था Ý
केविन क्रूज़सेन



4

के (ओके) , 19 16 बाइट्स

-3 बाइट्स ngn के लिए धन्यवाद!

{*/x#2}'&|(8#2)\

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

ओके के पास powerऑपरेटर नहीं है , इसलिए मुझे एक सहायक फ़ंक्शन की आवश्यकता है {*/x#2}(2 xबार कॉपी करें और परिणामी सूची को गुणा से कम करें)


आप कर सकते हैं छोड़ देते हैं{ x}
NGN

@ng धन्यवाद! मैंने इसकी कोशिश की और यह काम कर गया, लेकिन मुझे यकीन नहीं था कि यह स्वीकार्य है।
गैलन इवानोव

4

कीमियागर , 125 बाइट्स

_->In_x+128a+m
m+x+a->m+b
m+0x+a->n+a
m+0a->o+Out_b+Out_" "
n+b->n+x+c
n+0b+a->n+c
n+0a->p
o+b->o+c
o+0b->p
p+2c->p+a
p+0c->m

इसे ऑनलाइन आज़माएं! या हर इनपुट का परीक्षण करें!

व्याख्या

_->In_x+128a+m           # Initialize universe with input, 128a (value to compare to) and m (state)
m+x+a->m+b               # If c has been halved, subtract min(a, x) from a and x and put its value into b
m+0x+a->n+a              # If x < a, continue to state n
m+0a->o+Out_b+Out_" "    # Else print and continue to state o
n+b->n+x+c               # Add min(a, x) (i.e. x) back to x, and add it to c (we're collecting a back into c)
n+0b+a->n+c              # Then, add the rest of a to c
n+0a->p                  # Then, go to state p
o+b->o+c                 # Add min(a, x) (i.e. a) to c - x _is_ greater than a and so contains it in its binary representation, so we're not adding back to x
o+0b->p                  # Then, go to state p
p+2c->p+a                # Halve c into a
p+0c->m                  # Then go to state m

4

PHP ,41 39 बाइट्स

for($c=256;$c>>=1;)echo$argv[1]&$c,' ';

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

या 38 कोई मज़ेदार >>=ऑपरेटर और PHP 5.6+ के साथ:

for($x=8;$x--;)echo$argv[1]&2**$x,' ';

या थोड़ा-सा एंडियन वाला 36 ("0 2 4 0 16 0 64 0") आउटपुट:

while($x<8)echo$argv[1]&2**$x++,' ';

वास्तव में मैं बस >>=ऑपरेटर का उपयोग करना चाहता था , इसलिए मैं 39 के साथ चिपका रहा हूं ।

टेस्ट:

$php pow2.php 86
0 64 0 16 0 4 2 0

$php pow2.php 240
128 64 32 16 0 0 0 0

$php pow2.php 1
0 0 0 0 0 0 0 1

$php pow2.php 64
0 64 0 0 0 0 0 0

$php pow2.php 65
0 64 0 0 0 0 0 1

4

TSQL, 43 39 बाइट्स

एक छोटा फैंसी समाधान नहीं मिल सकता है, इसलिए यहां एक मानक लूप है। -4 बाइट्स मिकीटी और किरिल्ल के लिए धन्यवाद

DECLARE @y int=255

,@ int=128s:PRINT @y&@ SET @/=2IF @>0GOTO s

कोशिश करके देखो


बिटवाइज़ और (() का उपयोग करके आप निम्न में से कुछ को बचा सकते हैं ,@ int=128s:print @y&@ set @/=2IF @>0GOTO s। यह @KirillL द्वारा R उत्तर के लिए संकेत दिया जाता है
मिकी

@ मिक्की जो एक आकर्षण की तरह काम करती थी। बहुत बहुत धन्यवाद
t-clausen.dk


3

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर), 33 बाइट्स

n=>{for(;n>0;n&=n-1)Print(n&-n);}

पोर्ट ऑफ @Arnauld का जावास्क्रिप्ट (ES6) उत्तर है , इसलिए उसे अपवोट करना सुनिश्चित करें!

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

स्पष्टीकरण:

n=>{            // Method with integer parameter and no return-type
  for(;n>0      //  Continue looping as long as `n` is larger than 0:
      ;         //    After every iteration:
       n&=n-1)  //     Bitwise-AND `n` by `n-1`
    Print(      //   Print with trailing newline:
      n&-n);}   //    `n` bitwise-AND `-n`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.