एक अहस्ताक्षरित 16-बिट पूर्णांक में लोगों की संख्या की गणना करें


24

कुछ कथन (ओं) को लिखें जो एक अहस्ताक्षरित सोलह-बिट पूर्णांक में लोगों की संख्या की गणना करेंगे।

उदाहरण के लिए, यदि इनपुट है 1337, तो इसका परिणाम यह है 6क्योंकि 1337सोलह बिट बाइनरी संख्या है 0000010100111001, जिसमें छह शामिल हैं।


2
युक्ति: जिस तरह एक संख्या में कुछ अंक संख्या मॉड 9 के अनुरूप होते हैं, कुछ बिट संख्या संख्या 1 के बराबर होती है।
PyRulez

8
@PyRulez कोई भी संख्या शून्य मॉडुलो 1. है
थॉमस

1
नमस्ते, आपने एक गलत उत्तर चुना है जैसे कि स्वीकृत उत्तर (डिफ़ॉल्ट पोस्ट ब्रेकर लॉजिक ऑफ़ इयरली पोस्ट)।
ऑप्टिमाइज़र

4
@ थोमस मैंने कभी नहीं कहा कि यह एक सहायक टिप था।
पियरुलेज़

2
यह प्रश्न क्यों बंद हो गया है? करीबी मतदाता कृपया अपना कारण टिप्पणियों में बताएं। यदि यह es1024 की स्वीकृति है (बहुत चालाक) 4-बाइट उत्तर जो मानक कमियां का अनुपालन नहीं करता है (क्योंकि यह एक बिलिन का उपयोग करता है) कृपया बताएं कि यह कारण है। नहीं तो क्या है?
स्तर नदी सेंट

जवाबों:


37

80386 मशीन कोड, 4 बाइट्स

F3 0F B8 C1

जो पूर्णांक को अंदर ले जाता है cxऔर गिनती को आउटपुट करता है ax, और इसके बराबर होता है:

popcnt ax, cx     ; F3 0F B8 C1

और यहाँ एक 11 10 बाइट समाधान है जो POPCNT का उपयोग नहीं कर रहा है:

31 C0 D1 E9 10 E0 85 C9 75 F8

जो इसके बराबर है:

xor ax, ax        ; 31 C0   Set ax to 0
shr cx, 1         ; D1 E9   Shift cx to the right by 1 (cx >> 1)
adc al, ah        ; 10 E0   al += (ah = 0) + (cf = rightmost bit before shifting)
test cx, cx       ; 85 C9   Check if cx == 0
jnz $-6           ; 75 F8   Jump up to shr cx, 1 if not

क्या यह 32-बिट या 16-बिट (या तो वास्तविक या संरक्षित) मोड में है?
फ्यूजएक्सएक्सएल

2
@FUZxxl प्रदान की गई विधानसभा 16-बिट के लिए है, हालांकि इसे बदलने axऔर इसके cxसाथ eaxऔर ecx32-बिट में बदल जाता है। बाईटेकोड या तो एक ही है।
es1024

1
@ es1024 बाइट कोड समान है यदि यह 16-बिट मोड में और 32-बिट संस्करण 32-बिट मोड में संकलित किया गया था।
कोल जॉन्सन

2
क्या एक बिल्डिन को पॉपकान्ट नहीं किया जाता है और इस तरह से मानक खामियों का सामना करना पड़ रहा है? हालांकि दूसरे समाधान के लिए अभी भी श्रेय।
अल्काइमर

5
जब आप मशीन कोड की लंबाई का दावा करते हैं , तो शीर्षक "80386 मशीन कोड" नहीं होना चाहिए, न कि "80386 असेंबलर"?
केविन रीड

14

पायथन 2, 17 बाइट्स

bin(s).count('1')

binबिल्ट-इन रिटर्न पूर्णांक एक द्विआधारी स्ट्रिंग के लिए बदल दिया। हम तब 1अंकों की गणना करते हैं :

>>> s=1337
>>> bin(s)
'0b10100111001'
>>> bin(s).count('1')
6

11

जे (5 अक्षर)

J का कोई स्पष्ट प्रकार नहीं है। यह सभी पूर्णांकों के लिए सही काम करता है।

+/@#:
  • +/ योग
  • @ का
  • #: आधार दो प्रतिनिधित्व

11

सी, 21

for(n=0;x;n++)x&=x-1;

आपने कहा "कुछ कथन लिखें" ("एक फ़ंक्शन" नहीं) तो मैंने मान लिया है कि संख्या में आपूर्ति की गई है xऔर 1 की संख्या में वापस आ गई है n। अगर मुझे इनिशियलाइज़ नहीं करना है तो nमैं 3 बाइट्स बचा सकता हूँ।

यह x&x-1परीक्षण के लिए प्रसिद्ध अभिव्यक्ति का एक अनुकूलन है अगर कुछ 2 की शक्ति है (गलत है अगर यह सच है, अगर यह नहीं है।)

यहां यह प्रश्न से 1337 नंबर पर कार्रवाई में है। ध्यान दें कि 1 घटाना कम से कम 1 महत्वपूर्ण बिट और सभी शून्य को सही पर प्रवाहित करता है।

0000010100111001 & 0000010100111000 = 0000010100111000
0000010100111000 & 0000010100110111 = 0000010100110000
0000010100110000 & 0000010100101111 = 0000010100100000
0000010100100000 & 0000010100011111 = 0000010100000000
0000010100000000 & 0000010011111111 = 0000010000000000
0000010000000000 & 0000001111111111 = 0000000000000000

संपादित करें: पूर्णता के लिए, यहां भोली एल्गोरिथ्म है, जो एक बाइट लंबा है (और काफी धीमा है)।

for(n=0;x;x/=2)n+=x&1;


1
@ edc65 के रूप में तो यह पता चला है, मैं पहिया को मजबूत किया। कम से कम मैंने 2 बाइट्स को छोड़ कर बचा लिया {}। यह इतना आसान काम है कि मुझे आश्चर्य नहीं होना चाहिए कि कोई व्यक्ति पहले से ही इसके साथ आया था।
लेवल रिवर सेंट

"1960 में पहली बार प्रकाशित" , प्रभावशाली।
mbomb007

भोली एल्गोरिथ्म का सुधार:for(n=0;x;x/=2)n+=x&1;
हेलियोस

1
@nmxprime ओपी अहस्ताक्षरित int के लिए पूछता है। for -7 = 11111111 11111111 11111111 11111001 मेरे 32 बिट संकलक पर, मुझे तेज एल्गोरिथ्म के लिए 30 मिलता है, जो सही है। भोली एल्गोरिथ्म के लिए, यह -7, -7 / 2 = -3, -3 / 2 = -1, -1 / 2 = 0 के माध्यम से पुनरावृत्त करता है। जो गलत उत्तर देता है। X / = 2 से x >> = 1 को बदलना कुछ कंपाइलरों पर सही उत्तर दे सकता है, लेकिन C अपरिभाषित है कि क्या नकारात्मक संख्याओं पर >> के लिए 1 या 0 को खाली बिट में स्थानांतरित किया जाता है। वे संकलक जो एक 1 को शिफ्ट करते हैं, एक अनंत लूप में जाएंगे। वर्कअराउंड x को अहस्ताक्षरित इंट के रूप में परिभाषित करना है। फिर x = -7 भार (1 << 32) -7 = 4294967289 x में।
लेवल रिवर सेंट

5

जेली , गैर-प्रतिस्पर्धात्मक

यह जवाब गैर-प्रतिस्पर्धात्मक है, क्योंकि चुनौती पोस्ट किए जाने के बाद भाषा बनाई गई थी।

2 बाइट्स:

BS

Jelly, @Dennis द्वारा लिखी गई एक नई भाषा है, जिसमें J- जैसे सिंटेक्स है।

         implicit: function of command-line arguments
B        Binary digits as list
 S       Sum

इसे यहाँ आज़माएँ ।


4

अजगर, 4 बाइट्स

sjQ2

कार्यक्रम उस नंबर को लेता है जिसका हैमिंग वजन STDIN पर पाया जाना है।


4

जूलिया, 29 27 19 बाइट्स

n->sum(digits(n,2))

यह एक गुमनाम समारोह है कि एक ही तर्क को स्वीकार करता है बनाता है, n। इसका उपयोग करने के लिए, इसे कुछ इस तरह असाइन f=n->...करें और इसे कॉल करें f(1337)

digits()समारोह, जब 2 तर्कों के साथ कॉल, यह देखते हुए आधार में इनपुट के अंक की एक सरणी देता है। तो digits(n, 2)के द्विआधारी अंक लौटाता है n। सरणी का योग लें और आपके पास बाइनरी प्रतिनिधित्व में लोगों की संख्या है n


यह बहुत छोटा हो सकता है: जूलिया का एक समारोह हैcount_ones
एंड्रयू का कहना है कि मोनिका

@AndrewPiliser: सुझाव के लिए धन्यवाद, लेकिन बिल्ट-इन फ़ंक्शन जो वास्तव में कार्य को पूरा करते हैं उन्हें एक मानक खामियों के रूप में माना जाता है और जब स्पष्ट रूप से अस्वीकृत नहीं किया जाता है, तो वे डूब जाते हैं।
एलेक्स ए।


3

जो , 4 बाइट्स

/+Ba

यह एक अनाम फ़ंक्शन है। Baकिसी संख्या का द्विआधारी प्रतिनिधित्व देता है और /+इसे प्रस्तुत करता है।

   (/+Ba)13
3
   (/+Ba)500
6

3

आर, 24 बाइट्स

sum(intToBits(scan())>0)

scan() स्टड से इनपुट पढ़ता है।

intToBits()एक पूर्णांक लेता है और rawइनपुट के द्विआधारी प्रतिनिधित्व वाले शून्य और एक प्रकार के वेक्टर को लौटाता है ।

intToBits(scan())>0एक तार्किक वेक्टर लौटाता है जहां प्रत्येक तत्व है TRUEयदि संबंधित बाइनरी वेक्टर तत्व 1 है (चूंकि सभी तत्व 0 या 1 और 1> 0 हैं), अन्यथा FALSE

आर में, आप TRUEतत्वों की संख्या प्राप्त करने के लिए एक तार्किक वेक्टर को जोड़ सकते हैं, इसलिए ऊपर दिए गए तार्किकों के वेक्टर को योग करें जैसा कि हम चाहते हैं।

ध्यान दें कि इनपुट को सीधे sum()हैंडल नहीं किया जा सकता है raw, इसलिए तार्किकों का उपयोग करके समाधान।


sum(intToBits(scan()))एक ही नहीं होगा ?
seequ

@Sieg: दुर्भाग्य से कोई भी sum()प्रकार का इनपुट नहीं ले सकता है raw, जो कि वापस आ गया है intToBits()
एलेक्स ए।

यह वास्तव में मेरे लिए अजीब है।
देखिए

1
@Sieg: हाँ, यह मेरे लिए भी अजीब है। ओह अच्छा। अगर हर पोर्कचॉप सही होता, तो हमारे पास हॉटडॉग नहीं होते।
एलेक्स ए।

और वह सबसे अजीब रूपक है।
देखिए

3

रूबी, 18 बाइट्स

n.to_s(2).count'1'


1
n.to_s(2).count ?1यह भी काम करता है, लेकिन एक ही लंबाई है
पिकासो

2019 संस्करण: n.digits (2) .sum / 15 बाइट्स
GB

3

फोर्थ, 48 49 बाइट्स

: c ?dup if dup 1- and recurse 1+ then ;
0 1337 c

यदि एक वास्तविक कार्य की आवश्यकता है तो दूसरी पंक्ति बन जाती है

: c 0 swap c ;

और आप इसे "1337 सी" से बुलाते हैं। फोर्थ के अपेक्षाकृत क्रिया नियंत्रण शब्द इसे एक कठिन बनाते हैं (वास्तव में, ये बहुत कठिन बनाते हैं)।

संपादित करें: मेरे पिछले संस्करण ने नकारात्मक संख्याओं को सही ढंग से नहीं संभाला।


3

गणितज्ञ, 22 18 बाइट्स

मुझे याद दिलाने के लिए एलेफाल्फा का शुक्रिया DigitCount

DigitCount[#,2,1]&

@alephalpha धन्यवाद, लेकिन डिजिटकाउंट एक और पैरामीटर लेता है :)
मार्टिन

3

ES6 (34 22 21 बाइट्स):

यह एक सरल पुनरावर्ती कार्य है जिसे थोड़ा और छोटा किया जा सकता है। यह बस थोड़ा सा लेता है और खुद को फिर से चलाता है:

B=n=>n&&(1&n)+B(n>>1)

इसे http://www.es6fiddle.net/imt5ilve/ (आपको इसकी varवजह से आवश्यकता है 'use strict';) पर आज़माएं ।

मैं विश्वास नहीं कर सकता कि मैंने मछली पीटी है !!!

पुराना वाला:

n=>n.toString(2).split(1).length-1

ES5 (39 बाइट्स):

दोनों कार्यों को आसानी से ES5 के लिए अनुकूलित किया जा सकता है:

function B(n){return n?(1&n)+B(n>>1):0}

//ungolfed:

function B(number)
{
    if( number > 0 )
    {
        //arguments.callee points to the function itself
        return (number & 1) + arguments.callee( number >> 1 );
    }
    else
    {
        return 0;
    }
}

पुराना वाला:

function(n){return n.toString(2).split(1).length-1}

@ user1455003 ने मुझे एक बहुत अच्छा विचार दिया, जो कि सबसे छोटा 'ट्रिगर' था:

function B(n,x){for(x=0;n;n>>=1)x+=n&1;return x}

मैंने इसे ES6 में ढाल लिया है और इसे बहुत छोटा करने के लिए पुनरावर्ती बना दिया है!


1
यहाँ एक छोटा सा 'रेगर' जावास्क्रिप्ट फंक्शन है। फंक्शन B (n, x) {के लिए (x = 0; n; n >> = 1) x + = n & 1; वापसी x}
wolfhammer

@ user1455003 बहुत बहुत धन्यवाद या आपका सुझाव! मैंने इसका उपयोग किया है और इसे ES6 के लिए अनुकूलित किया है और बहुत छोटा किया है। धन्यवाद!
इस्माइल मिगुएल

आपका स्वागत है! मुझे अच्छा लगा कि आपने इसके साथ क्या किया। पुनरावृत्ति के साथ नियमित जावास्क्रिप्ट 39 तक नीचे है! समारोह B (n) {वापसी n! (1 & n) + B (n >> 1): 0}
wolfhammer

@ user1455003 यदि आप चाहें, तो आप ES5 भाग को संपादित कर सकते हैं और बाइट काउंट को गोल्फ संस्करण में जोड़ सकते हैं। (मुझे लगता है कि आप संपादन के साथ प्रतिष्ठा जीतते हैं)।
इस्माइल मिगुएल

@ user81655 वाह! यह काम करता हैं!!! आपका बहुत बहुत धन्यवाद! मैं वास्तव में जानता था कि यह कम किया जा सकता है
इस्माइल मिगुएल

2

> <> (मछली) , 24 बाइट्स + 2 = 26

0$11.>~n;
2,:?!^:2%:{+}-

कार्यक्रम केवल मॉड 2 को दोहराता है, घटाना और विभाजित करता है जब तक कि इनपुट नंबर शून्य नहीं हो जाता है, तब मॉड 2 के योग को प्रिंट करता है।

-vध्वज के साथ परीक्षण करें , जैसे

py -3 fish.py ones.fish -v 1337

16 बिट पूर्णांक के लिए कोडपॉइंट इनपुट शायद पर्याप्त नहीं है। ( -vध्वज संस्करण अभी भी काम करता है।)
यादृच्छिक

@randomra अरे, तुम सही हो। जबकि यूनिकोड इनपुट काम करता है, 16-बिट सीमा से बाहर परिमाण के कुछ ही आदेश है ...
Sp3000

2

PHP (38 बाइट्स):

यह मेरे ES6 उत्तर के समान aproach का उपयोग करता है

<?=count(split(1,decbin($_GET[n])))-1;

यह एक पूर्ण कोड है, आपको केवल इसे एक फ़ाइल में डालना और इसे पैरामीटर के साथ ब्राउज़र पर एक्सेस करना होगा n=<number>

PHP <4.2 (32 बाइट्स):

यह थोड़ा छोटा है:

<?=count(split(1,decbin($n)))-1;

यह केवल PHP <4.2 पर मज़बूती से काम करता है क्योंकि निर्देश register_globalsसेट किया गया थाOff PHP4.2 से PHP5.4 तक डिफ़ॉल्ट रूप से गया था (जो तब तक हटा दिया गया था)।

यदि आप एक php.iniफ़ाइल बनाते हैं register_globals=On, तो यह काम करेगा।

कोड का उपयोग करने के लिए, POST या GET के साथ, ब्राउज़र का उपयोग करके फ़ाइल तक पहुँचें।

@ViciciusMonteiro का सुझाव (38/45 बाइट्स):

उन्होंने 2 वास्तव में अच्छे सुझाव दिए जिनका फ़ंक्शन का बहुत दिलचस्प उपयोग है array_sum:

38 बाइट्स:

<?=array_sum(str_split(decbin(1337)));

45 बाइट्स:

<?=array_sum(preg_split('//', decbin(1337)));

यह वास्तव में बहुत अच्छा विचार है और इसे थोड़ा और छोटा किया जा सकता है, 36 बाइट्स लंबा होने के लिए:

<?=array_sum(split(1,decbin(1337)));

2
या आप इको सरणी_sum (str_split (डेबिन (1337))) का उपयोग कर सकते हैं; और आप बहुत इको एरे_सुम (प्रीग_सप्लिट ('//', डीकबिन (1337)) का उपयोग कर सकते हैं);
विनीसियस मोंटीरो

1
@ViniciusMonteiro आपके सुझाव के लिए बहुत बहुत धन्यवाद। मैं वास्तव में इसे प्यार करता था! मैंने इसे उत्तर में जोड़ दिया है।
इस्माईल मिगुएल

चार बाइट का उपयोग करके प्राप्त करें <?=substr_count(decbin(1337),"1");(34 बाइट)
कोजिकेरो

1
@ कोजिकेरो और आप उद्धरणों को हटाकर और भी अधिक बचत कर सकते हैं <?=substr_count(decbin(1337),1);:। यह कुल 32 बाइट्स है। यह मानते हुए कि यह एक अलग-पर्याप्त कोड है, क्या आप इसे अपने उत्तर के रूप में पोस्ट नहीं करना चाहते हैं? मैं निश्चित रूप से इसे बढ़ा दूंगा!
इस्माइल मिगुएल

यदि आप पैरामीरीज़ेशन का उपयोग करते हैं तो @Cogicero इट्स केवल दो बाइट्स छोटे हैं: <?=substr_count(decbin($argv[1]),1);(या $_GET[n]; 36 बाइट्स)
टाइटस


2

Japt, 3 बाइट्स (गैर-प्रतिस्पर्धी)

¢¬x

इसे यहाँ आज़माएँ।


यार, मैंने कभी किसी कारण से उन तारीखों को नहीं देखा।
मामा फन रोल

1
Haha, Japt सबसे छोटा है: D BTW, ¢o1 lसाथ ही काम करेगा। एक और दिलचस्प दृष्टिकोण है -¢¬r-0; ¢¬बाइनरी अंकों की सरणी में विभाजन, r-0घटाव द्वारा कम कर देता है, 0 से शुरू होता है, और -परिणाम को नकारता है, जिससे यह सकारात्मक हो जाता है।
ETHproductions

कल रात तक, अब आप उपयोग कर सकते हैं ¢¬x
ETHproductions

2

मोम ,31 27 बाइट्स

गैर-प्रतिस्पर्धात्मक उत्तर। इस चुनौती की तुलना में बीज़वैक्स नया है।

यह समाधान ब्रायन खेरिगन की "बिट ट्विडलिंग हैक्स" वेबसाइट से सेट बिट्स की गिनती के तरीके का उपयोग करता है।

यह सिर्फ एक लूप के माध्यम से चलता है, बिट काउंट को बढ़ाता है, जब number=number&(number-1)तक कि इसके माध्यम से पुनरावृत्ति नहीं होती है number = 0। समाधान केवल लूप से गुजरता है जितनी बार बिट्स सेट होते हैं।

मैं कुछ निर्देशों को फिर से व्यवस्थित करके 4 बाइट्स से बच सकता हूं। स्रोत कोड और स्पष्टीकरण दोनों अपडेट हुए:

pT_
>"p~0+M~p
d~0~@P@&<
{@<

स्पष्टीकरण:

pT_            generate IP, input Integer, redirect
>"             if top lstack value > 0 jump next instruction,
               otherwise continue at next instruction
  p            redirect if top lstack value=0 (see below)
   ~           flip top and 2nd lstack values
    0+         set top lstack value to 0, set top=top+2nd
      M        decrement top lstack value
       ~       flip top and 2nd lstack values
        p      redirect to lower left
        <      redirect to left
       &       top=top&2nd
      @        flip top and 3rd lstack values
    @P         increment top lstack value, flip top and 3rd values
 ~0~           flip top and 2nd values, set top=0, flip top and 2nd again
d              redirect to upper left
>"p~0+M.....   loop back

  p            if top lstack = 0 at " instruction (see above), redirect
  0            set lstack top to zero (irrelevant instruction)
  <            redirect to the left
 @             flip top and 3rd lstack values
{              output top lstack value as integer (bitcount)

बीटवॉक्स दुभाषिया, भाषा कल्पना और उदाहरणों से युक्त मेरे गीथह रिपॉजिटरी को क्लोन करें ।


1

जावा, 17 बाइट्स

काम करता है के लिए byte, short, char, और int। एक मेमने के रूप में उपयोग करें।

Integer::bitCount

यहाँ परीक्षण करें

बिल्ट-इन का उपयोग किए बिना:

42 बाइट्स

s->{int c=0;for(;s!=0;c++)s&=s-1;return c}

यहाँ परीक्षण करें


6
यह एक मानक ढील है: बिल्टिन फ़ंक्शंस जो वास्तव में वही करती हैं जो आप चाहते हैं।
फ्यूजएक्सएक्सएल

@FUZxxl ओपी ने मानक खामियों के लिए कभी मना नहीं किया
कोल जॉनसन


6
@FUZxxl जबकि es1024 सही है कि मानक खामियों को डिफ़ॉल्ट रूप से बंद कर दिया गया है, अंतर्निहित कार्यों का उपयोग करते हुए वर्तमान में + 43 / -26 के वोट टूटने पर एक स्वीकृत खामी नहीं है।
मार्टिन एंडर

1

क्लिप , ६

2 तरीके:

cb2nx1

यह आवश्यकता का सीधा अनुवाद है: संख्या -2 के आधार -2 में लोगों की गिनती।

r+`b2n

एक अन्य विधि, जो आधार -2 प्रतिनिधित्व के अंकों का योग लेती है।


1

अष्टक, १,

sum(dec2bin(s)-48)

उदाहरण:

octave:1> s=1337
s =  1337
octave:2> sum(dec2bin(s)-48)
ans =  6

1

जीएमएल (गेम मेकर लैंग्वेज), 21 बाइट्स

for(n=0;x;n/=2)n+=x&1



1

पॉवरशेल (51 बाइट्स)

"$([char[]][convert]::ToString($s,2)|%{"+$_"})"|iex

स्पष्टीकरण: से
[convert]::ToString($s,2)एक बाइनरी स्ट्रिंग प्रतिनिधित्व का उत्पादन करता है $s
[char[]]इसे एक वर्ण सरणी के रूप में रखता है और हमें प्रत्येक वर्ण की गणना करने की अनुमति देता है।
|%{"+$_"}प्रत्येक अक्षर को + साइन के साथ प्रीपेक्ट करता है जिसके परिणामस्वरूप उप अभिव्यक्ति पाईपिंग स्ट्रिंग को
"$()"सम्‍मिलित करती है (यानी। "+1 +0 +1 +1 +0 +1 +0 +0" = 4).ToString()
|iex


हिया! आपके पास एक ही तर्क के बाद, इनलाइन -joinऑपरेटर का उपयोग क्यों न करें और .ToString()45 बाइट्स प्राप्त करने के लिए एक निहितार्थ [char[]][convert]::ToString($s,2)-join'+'|iex... या, एक अलग दृष्टिकोण के रूप में इनलाइन -replaceऑपरेटर 43 बाइट्स प्राप्त करने के लिए उपयोग करें([convert]::ToString($s,2)-replace0).length
AdmBorkBork

1

क्लोजर, 42 बाइट्स

#(count(filter #{\1}(Long/toString % 2)))

दायें से बायें पढ़ना, बाइनरी स्ट्रिंग में बदलना, वर्णों के अनुक्रम में बदलना, 1s पर फ़िल्टर करना और गिनना कि आपके पास कितने हैं।

सिडग की मदद से पूरा


42:#(count(filter #{\1}(Integer/toString% 2)))
seequ

आपको एक और चरित्र की आवश्यकता है#(count(filter #{\1}(Integer/toString % 2)))
नील मैसन

नहीं, तुम नहीं। :)
१५

यह वही है जो मुझे तब मिला जब मैंने इसे आजमाया:CompilerException java.lang.IllegalArgumentException: No matching method: toString_PERCENT_
नील मासन

मैंने इसे Try Clojure में परखा। जाहिरा तौर पर पृष्ठ अचानक नहीं पहचानता है Integer/toString। हालांकि यह एक दूसरे से पहले काम किया था।

1

हास्केल 42 वर्ण

t 0=[]
t n=t(quot n 2)++[rem n 2]
f=sum.t

f :: Integer -> Integer
इंटरैक्टिव दुभाषिया के रूप में फ़ंक्शन उपयोग की घोषणा करता है f <number>या main=print$f <number>फ़ाइल के अंत में लाइन जोड़ता है ।


आप rem n 2इसकी सूची बनाने और divइसके बजाय उपयोग करने के बजाय सीधे s को बहुत अधिक बाइट्स बचा सकते हैं quot: t 0=0 t n=t(div n 2)+rem n 2- fअब और नहीं।
नीमी

1

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

de2biजीरो का एक वेक्टर बनाता है और बाइनरी नंबर का प्रतिनिधित्व करता है, और sumसभी प्रविष्टियों का योग देता है।

sum(de2bi(n))

1

S, 4 चार्ट / 11 बाइट्स (गैर-प्रतिस्पर्धी)

⨭⟦ïⓑ

Try it here (Firefox only).

व्याख्या

इनपुट को बाइनरी में कनवर्ट करता है, चार्ट के साथ विभाजन करता है, और परिणामी सरणी का योग प्राप्त करता है।

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