स्रोत कोड पारिस्थितिक पदचिह्न


102

आपको बस एक जर्मन कार निर्माण कंपनी द्वारा काम पर रखा गया है। आपका पहला कार्य, एक इंजीनियर के रूप में, एक प्रोग्राम लिखना है जो ASCII तार के पारिस्थितिक पदचिह्न की गणना करता है।

चरित्र के पारिस्थितिक पदचिह्न की गणना निम्नानुसार की जाती है:

चरित्र के ASCII कोड को बाइनरी में लिखें, और 1 की संख्या गिनें।

उदाहरण के लिए, A2 के पदचिह्न हैं, लेकिन O5 के पदचिह्न के साथ गंदगी है।

एक स्ट्रिंग के वैश्विक पदचिह्न उसके पात्रों के पैरों के निशान का योग है। एक खाली स्ट्रिंग में शून्य का एक पदचिह्न होता है।

आपके प्रोग्राम को एक ASCII स्ट्रिंग को पैरामीटर (कमांड लाइन या इनपुट के माध्यम से) के रूप में स्वीकार करना चाहिए, इसके पारिस्थितिक पदचिह्न की गणना करें और इसे आउटपुट करें। कार्यक्रम को स्वयं ASCII एनकोडेड होना चाहिए।

हालांकि हिचकी है। जैसा कि आपकी कंपनी सख्त पर्यावरण नियमों के साथ एक नया बाजार में प्रवेश करना चाहती है, आपको अपने कार्यक्रम को ट्यून करने की आवश्यकता है ताकि यह "परीक्षण मोड" में अलग तरह से व्यवहार करे। इस प्रकार:

प्रोग्राम को आउटपुट 0 होना चाहिए जब यह स्ट्रिंग testको पैरामीटर के रूप में प्राप्त करता है ।

स्कोरिंग

सबसे छोटे पारिस्थितिक पदचिह्न के साथ स्रोत कोड जीतता है (और हाँ, उत्तर testनिषिद्ध है!)


36
मुझे क्षमा करें, मैं समाचार के साथ नहीं रख रहा हूं, लेकिन मैंने इसे पढ़ा है। क्या हम मान सकते हैं कि जर्मन कार कंपनी निश्चित रूप से वोक्सवैगन नहीं कहलाती है?
लेवल रिवर सेंट

7
संदर्भ के लिए, कम खर्चीले पात्रों के लिए सबसे महंगा:\x7F}~_?{ow7yvu/s\x1F;=znm>k|OW[]^gc\x1Ex\x1D\eef\\'ZY+-VU.St\x173iNM5K6r\x0FG9:q<ljQ\x15\x13pC\aEF8IJL4\x0E21\x16RTh,X*)\x19\v&%\x1A#d\x1C\rab`!\"$(\x180\x05A\x14B\x12\x11DHP\x03\f\x06\n\t\x80\x10\x01@\x04\b\x02 \x00
कारिडोरक

19
@steveverrill यह एक काल्पनिक कंपनी है, लेकिन इसका नाम वास्तव में V से शुरू होता है और बीच में कहीं W है। लेकिन वास्तविकता के साथ कोई भी समानता मात्र संयोग है, कम से कम किसी ने हमें मुकदमा किया।
माइंडविन

1
कार्य (कार्यक्रमों के बजाय) की अनुमति दी?
लुइस मेन्डो

12
वे आपसे झूठ बोल रहे हैं! 1 की 0 की तुलना में बहुत अधिक पारिस्थितिक रूप से अनुकूल हैं। प्रमाण चाहिए? बाइनरी में अपने स्रोत कोड का प्रिंट आउट लें। 0 का उपयोग लगभग 1 के रूप में दो बार के रूप में ज्यादा स्याही है। और यदि आप एक अंधेरे पृष्ठभूमि के साथ कोड करते हैं, तो वे आपकी स्क्रीन पर प्रदर्शित करने के लिए अधिक बिजली बर्बाद करते हैं। (यदि आप एक सफेद पृष्ठभूमि के साथ कोड करते हैं, तो आप पहले से ही सभी सफेद रंग के इलेक्ट्रॉनों को बर्बाद कर रहे हैं, इसलिए स्पष्ट रूप से किसी भी पर्यावरण के प्रति जागरूक प्रोग्रामर को अपने संपादक में एक काली पृष्ठभूमि का उपयोग करना चाहिए।) अतिरिक्त पर्यावरण के अनुकूल होने के लिए, हम सभी को लिखना चाहिए। व्हॉट्सएप ...
डारेल हॉफमैन

जवाबों:


45

सीजेएम, ३३ ३१

"",AA#b:c~

दोहरे उद्धरण चिह्नों के बीच 11300000000950000000000010100000101000001150000010000000000000000000010000000033000000000050000000050000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 पर भेज सकते हैं।

कोड के बराबर है

11300000000950000000034000000011600000001010000000115000000011600000000340000000061000000003300000000420000000058000000010500000000500000000102000000009800000000490000000102000000009800000000490000000098
AA#b:c~

जिसका परीक्षण ऑनलाइन किया जा सकता है

यह कैसे काम करता है

"",  e# Push the length of the string.
AA#  e# Push 10000000000.
b    e# Turn the length into the array of its base-10000000000 digits.
:c   e# Cast each digit to character. This pushes the following:
     e# q_"test"=!*:i2fb1fb1b
~    e# Evaluate the string.

यह कैसे काम करता है

q_     e# Read all input and push a copy.
"test" e# Push the string "test".
=!*    e# Check for inequality and repeat the string 0 or 1 times.
       e# This replaces input "test" with the empty string.
:i     e# Cast each character to integer
2fb    e# Replace each integer by the array of its base-2 digits.
1fb    e# Replace each array of base-2 digits by the sum of its digits.
1b     e# Add the sums of digits.

इस स्रोत कोड में 75 का पारिस्थितिक पदचिह्न है।


3
वाह, यह चतुर है। मुझे लगता है कि चेतावनी यह है कि आप इसे कभी नहीं चला सकते हैं, क्योंकि दुनिया की सभी मेमोरी पूरे कोड को पकड़ नहीं सकती हैं।
रेटो कोराडी

49
यह एक छोटी सी असुविधा है। आप प्रकृति पर कोई मूल्य नहीं लगा सकते।
डेनिस

यह एक अच्छी चाल है, लेकिन यह अमान्य है अगर नहीं चलाया जा सकता है
edc65

5
@PyRulez: जब तक यह किसी चीज़ के अलावा किसी अन्य जगह से बाहर नहीं जाएगा और अंतरिक्ष के अलावा किसी और चीज़ पर कब्जा नहीं करेगा।
21

5
सिर्फ पेंग्वेज़ का इस्तेमाल क्यों नहीं?
jimmy23013

40

पेंगुइन , ०


आउटपुट में है एकल , के बाद से lenguage / Brainfuck आधार 10 में पूर्णांकों मुद्रण का कोई समझदार तरीका है।

वास्तविक स्रोत कोड में है

22360559967824444567791709913713659826044558304969374451791514225490473373040212332757409553558758107085015797320276213515502796255082717802632399123502087743818475438512153373406931103005017157351410347278489842099128517039634739852783737052963203448945756470632484148121769939122103257063633371522287190530269279693540898545359211009781370158317748609540216376596783541124510013448091325488601732964773653391702083563797082990404753843419895799343996435988722965711513708742853668363743953430527328863418281733901770990932025503662188187254784985474815936854540100376410040743052620419372327997519047616042603909398552951490180076364164838561112002025592431155898041427468731461614504254168899805662501979953318388813759833797929243626668399650485310047043700001093878284174322463350892654886806075148010832042248607926124030339950499631072150856939786062937034833055717723216663269161130154002679878012158315587925933383341827053312086716181702533743607685576475754259877651521989944802973721727159955208722180232955193930065862370838526521351991966172723976565264862909528310162816593997640732796289501819499741414526385058421824690665542546821941125191276568479078107133076037506211133628962099403163812267452274532219562823184225236020523509355625620557197876838014050964240952738109101849512504021041103516630358995290177306585560988278630098667702211916671663291473843258785929522017507744814910480115446168939335008597569919072874897148594826036210511162928991890818427747059833051607455121463371211282760364668765311589329918870071117807132901910082663054895226456039171170783440772764031568108965851688162729239711772886386306884508520204834432674839183166053019421652064937613583258148354531835035461504442885024563141848164279928769795684221364984104923764359842286827870778678989243517189772102669283996930513577004801536579491093711362942690905779844535371088542020595945700544234301668098553671685123172583259206072965508639556627967633275762621813851479909708616154198658896714629908456913467267354690109885368211752176196164620615081464122410029328694509842558492529684841818953632659248840216891072110853731776562597900145806210691868173380612838327841104919352821441230296200143603175486627682007399030356592930049570084097858148122367

अशक्त बाइट्स और निम्नलिखित ब्रेनफक कार्यक्रम के बराबर है:

,[<<+++++++++++++++++++++++++++++++++++++++++++++++++>>>>>>,]
>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<
<<<++++++++++++++++++++++++++++
[-<----<<<<----<<<<----<<<<---->>>>>>>>>>>>>]
<----<<<<---<<<<+++++++++++<<<<----
<<<<
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[
 <<<<<<<<<<<<<<<<<<<<<<<<
 <<<++++++++++++++++++++++++++++
 [-<++++<<<<++++<<<<++++<<<<++++>>>>>>>>>>>>>]
 <++++<<<<+++<<<<-----------<<<<++++
 >>>>>>>>>>>>
 [
  -[<]<<[.<]
  >>>
  -[<]<<[.<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[.<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[.<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[.<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[......<]
  >>>
  -[<]<<[.<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[......<]
  >>>
  -[<]<<[..<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[......<]
  >>>
  -[<]<<[...<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[......<]
  >>>
  -[<]<<[....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[......<]
  >>>
  -[<]<<[.....<]
  >>>
  -[<]<<[......<]
  >>>
  -[<]<<[......<]
  >>>
  -[<]<<[.......<]
  <
 ]
]

Brainfuck.tk पर इसे ऑनलाइन आज़माएं

ब्रेनफॉक कोड की लंबाई अत्यधिक उप-रूपी है - शुरुआत के लिए, मैंने सभी एएससीआईआई पात्रों के पैरों के निशान काट दिए हैं - लेकिन स्कोर 0 स्कोर 0 है ...


कोई रास्ता नहीं, पेंग्वेज़ वास्तव में अशक्त बाइट्स का समर्थन करता है ?!
बीटा डेके

20
मुझे लगता है कि इस तरह के जवाब से जनता का कोई सम्मान नहीं होता है: यह धोखा है, और सिस्टम को गेमिंग करना है ... लेकिन यह इस चुनौती का पूरा बिंदु है। +1
edc65

1
"आउटपुट एकतरफा है, क्योंकि Lengage / Brainfuck का आधार 10. में पूर्णांक प्रिंट करने का कोई समझदार तरीका नहीं है।" । मुझे लगा कि पेंग्वेंज / ब्रेनफक के बिंदु का एक हिस्सा यह था कि इसमें कुछ भी करने का एक समझदार तरीका नहीं था :)
एडम

9
जब मैंने आपके प्रोग्राम को आपके द्वारा दी गई परिभाषा से दोबारा बनाने की कोशिश की तो यह मेरे लिए काफी काम नहीं आया। क्या आप कृपया पूरा पेंगुइन स्रोत पोस्ट कर सकते हैं ताकि मैं देख सकूँ कि आपका कार्यक्रम इसे पुनः बनाने के मेरे प्रयास से कहाँ भिन्न है? ;-)
Cort Ammon

1
मुझे क्या आश्चर्य है कि लेंजेज नल का समर्थन करता है, लेकिन यह है कि आप बीएफ में ऐसा कार्यक्रम बनाने में कामयाब रहे। भूतिया ...
को 13:00 बजे आउटगोल्फ

12

पॉवरशेल, 337 344 304 अंक

PARAM([CHAR[]]$A)$A|%{$B+=([CONVERT]::TOSTRING(+$_,2)-REPLACE0).LENGTH};($B,0)[-JOIN$A-CEQ"test"]

मैं तुम्हें बहुत सस्ते में देख रहा हूँ!

के रूप में इनपुट लेता है $A, फिर चार-सरणी के रूप में कास्ट करता है, फिर प्रत्येक चरित्र पर फॉर-लूप से पुनरावृति करता है [convert]::ToString(), चरित्र को बाइनरी में उस स्थिति में परिवर्तित करने के लिए हास्यास्पद रूप से वर्डी का उपयोग करता है , सभी 0 को कुछ नहीं के साथ बदल देता है, फिर लंबाई और को जोड़ता है $B। अंत में, एक डायनेमिक ऐरे में इंडेक्स की समानता का उपयोग करता है (जैसे, यदि $Aहै test, तो -CEQहै $TRUE, इसलिए यह दूसरे तत्व को इंडेक्स करता है 0)।

Edit1 - सही परीक्षण का मामला "TEST"
Edit2 - एक जोड़े को उनके सूचकांकों के बजाय पात्रों पर पुनरावृति करके और उनके द्वारा -replaceकुछ भी नहीं बदलने पर दूसरे पैरामीटर की आवश्यकता नहीं है यह याद करके ।


डबल कोट " 00100010सिंगल कोट की तुलना में अधिक पर्यावरण के अनुकूल है ' 00100111
याकूब क्राल

इनपुट के लिए गलत मान 0 देता है"TEST"
याकूब क्राल

1
@JacobKrall दोहरे-उद्धरण पर अच्छी पकड़ "-CEQकेस-सेंसिटिविटी के लिए भी सही । इसने अंकों को थोड़ा ऊपर कर दिया, क्योंकि मैं गलत तरीके से स्कोर कर रहा था क्योंकि मैंने ' 'इसे अपने परीक्षणों पर सही ढंग से नहीं चित्रित किया था।
AdmBorkBork

9

पायथ - 52 49

तीन बिंदु @orlp को धन्यवाद देते हैं।

*/.BQ`1nQ"test

पदचिह्न को बचाने के लिए उद्धरणों में इनपुट लेता है।

टेस्ट सूट


उह, मैं लगभग आपके जैसा ही हूं, लेकिन मेरा जवाब भी ऐसा ही है और आपने पहले पोस्ट किया है। 3 को बचाने के @,0साथ बदलें *:)
orlp

1
@ मैलेटेन आप कहते हैं कि आपको तीन अंक मिले, लेकिन स्रोत अभी भी कहता है @,0, क्या आप बदलना भूल गए?
ताली

@ConfusedMr_C हां। मैंने सिर्फ पर्मलिंक को बदल दिया और वास्तविक उत्तर को भूल गया।
माल्टीसेन

7

आम लिस्प, 294 281 235

स्कोर को कम करने के लिए, मैंने चर नामों के रूप में @(लागत 1) और !(लागत 2) का उपयोग किया (संपादित करें: और यह बेहतर है यदि मैं @फ़ंक्शन में सबसे अधिक परिवर्तनशील चर के लिए उपयोग करता हूं )। मैं भड़कने रहा हूँ भी , क्योंकि यह सस्ता है।

(LAMBDA(@)(IF(STRING="test"@)0(LOOP FOR ! ACROSS @ SUM(LOGCOUNT(CHAR-CODE !)))))

सुंदर मुद्रित

(LAMBDA (@)
  (IF (STRING= "test" @) 0
      (LOOP FOR ! ACROSS @ SUM (LOGCOUNT (CHAR-CODE !)))))

वैसे स्कोर २ ९ ४ जैसा है;)
कैबी ४०

@ Cabbie407 मैं स्कोरिंग के बारे में याद किया, माफ करना :-)
coredump

1
@ Cabbie407 मैं कुछ मिनट के लिए एक बहुत ही कम स्कोर होने का अजीब लग रहा था ...
coredump

1
बस आपको जानकारी देना चाहता था, क्योंकि स्कोरिंग पद्धति के बारे में जानकर आप शायद एक अलग कोण से अपने कोड को देखेंगे। और मैं देख रहा हूं कि आपने पहले ही कुछ बदल दिया है।
कैबी 407

1
@ Cabbie407 मैं आपको धन्यवाद देना भूल गया, btw। धन्यवाद।
coredump

6

जावास्क्रिप्ट, 279

बग फिक्स संपादित करें (प्रत्येक वर्ण की बिट 1 की गिनती न करें)

एक पूरा कार्यक्रम, पॉपअप के माध्यम से इनपुट और आउटपुट के साथ। फ़ायरफ़ॉक्स में परीक्षण किया गया, किसी भी आधुनिक ब्राउज़र में काम करना चाहिए।

B=(P=prompt)(H=D=0)
while(B!="test"&&(A=B.charCodeAt(H++)))while(A)D+=A&1,A>>=1
P(D)

कुछ उपकरण (फ़ायरफ़ॉक्स के साथ परीक्षण)

w=c=>c.toString(2).split('').reduce(function(a,b){return a- -b})

t=[[],[],[],[],[],[],[],[],[]]
u=[[],[],[],[],[],[],[],[],[]]
for(c=1;c<256;c++)
  c<33|c>126&c<161 ? t[w(c)].push('\\'+c) : u[w(c)].push('&#'+c+';')
for(i=0; i++<8;)       
  T.innerHTML+=i+': '+u[i].concat(t[i]).join(' ')+'\n'

function Calc()
{
  var r='', t=0, b
  I.value.split('').forEach(function(c) {
    c = c.charCodeAt(), r += '\n&#'+c+' '+((256+c).toString(2).slice(1))+' : '
    for(b=0;c;c>>=1) b += c&1
    r += b, t += b
  })
  R.innerHTML='Total '+t+'\nDetail'+r
}
#I { width: 400px }
<b>Weight table</b><pre id=T></pre><br>
<b>Counter</b><br><textarea id=I></textarea><button onclick="Calc()">-></button> <pre id=R></pre>


1
यह उत्तर अमान्य है - यह test
0.39 के

@ASCIIThenANSI यह मेरे ब्राउज़र में नहीं है। लेकिन मैं फिर से जाँच करने जा रहा हूँ
edc65

यह मज़ेदार है ... अपने काउंटर के साथ इसका परीक्षण करना, मुझे 279 मिलता है, और इसे स्वयं के साथ परीक्षण करना, मुझे 277 मिलता है। मुझे आश्चर्य है कि जो सही है; यह newlines के साथ कुछ करने के लिए हो सकता है?
ETHproductions 20

@ETHproductions मैंने दोहरी जांच की और सही गणना 279 है। लेकिन यह एक स्ट्रिंग के साथ काम नहीं करता है जिसमें एक नई रेखा है - यह promptफ़ंक्शन से संबंधित एक समस्या है। फ़ायरफ़ॉक्स में, promptनईलाइन्स (2bit) को स्पेस (1bit) में ट्रांसलेट करता है, इसलिए हम 279 के बजाय 277 प्राप्त करते हैं
edc65

@ETHproductions ... क्रोम में (विंडोज पर) नई लाइन CR LF जोड़ी (3bit + 2bit) बन जाती है और गिनती फिर से गलत है
edc65

6

जूलिया, 254 246 232

P=readline()
print(P=="test"?0:sum([count_ones(1*A)for A=P]))

count_onesसमारोह अपने इनपुट की बाइनरी प्रतिनिधित्व में लोगों की संख्या की गणना।

FryAmTheEggman के लिए मेरे पारिस्थितिक पदचिह्न को कम किया!


1
कोई समस्या नहीं, मैं वास्तव में पर्यावरण के बारे में परवाह करता हूं;)
फ्राईएमईमैनमैन

6

पायथन 3, 271

z=input();print([sum([bin(ord(i)).count("1")for i in z]),0][z=="test"])

3
थोड़े बहुत बदलाव मुझे 228 देते हैं
FryAmTheEggman

2
क्यों नहीं लाभ उठाते हैं कि बूल्स ints हैं? z=input();print(sum(bin(ord(i)).count("1")for i in z)*(z!="test")).... @ FryAmTheEggman jinx?
नाइटशेडक्यूवेन

1
@NightShadeQueen Haha, इसका मतलब है कि मैं एक दिन के लिए पोस्ट नहीं कर सकता हूं? : एक्स वैसे भी इस साइट के लिए एक नए उपयोगकर्ता के लिए एक बहुत अच्छी पकड़ है, अच्छा काम! वैसे भी, PPCG में आपका स्वागत है! :) इसके अलावा, अधिक विषय पर, अर्धविराम को हटाया जा सकता है क्योंकि इसकी लागत एक नई रेखा से थोड़ी अधिक है।
FryAmTheEggman

5

पर्ल, 136 118 73

$_=unpack"B*";$_=y@1@@

सभी के @साथ बदलें\0

उपयोग उदाहरण:

perl -p entry.pl entry.pl

5

MATLAB, 198 194 बाइट्स

A=input('','s');~strcmp('test',A)*nnz(dec2bin(A)-48)

सबसे पहले, स्ट्रिंग को inputफ़ंक्शन के माध्यम से STDIN से पढ़ा जाता है । एक बार ऐसा होने पर, हम इनपुट स्ट्रिंग की तुलना स्ट्रिंग से करते हैं test। यदि परिणाम नहीं है test , तो हम प्रत्येक वर्ण को उसके ASCII कोड और फिर उसके बाइनरी प्रतिनिधित्व के माध्यम से परिवर्तित करते हैं dec2bin। इस फ़ंक्शन का एक सुंदर परिणाम यह है कि यदि आप एक स्ट्रिंग जमा करते हैं, तो इसके ASCII कोड के द्विआधारी प्रतिनिधित्व को प्रति पंक्ति एक वर्ण के रूप में सीमांकित किया जाता है।

उदहारण के लिए:

>> dec2bin('ABCD')

ans =

1000001
1000010
1000011
1000100

dec2binएक चरित्र सरणी आउटपुट। एक बार ऐसा होने पर, 48 को घटाएं, जो कि 0 के लिए ASCII कोड है ताकि मैट्रिक्स double0s और 1s से मिलकर परिवर्तित हो जाए । एक बार ऐसा होने के बाद, nnzइस मैट्रिक्स में कुल संख्या शून्य-शून्य तत्वों को गिना जाता है। ध्यान दें कि इस परिणाम के साथ तुलना की गई स्ट्रिंग के विपरीत से गुणा किया जाता है test। क्या स्ट्रिंग नहीं होनी चाहिए test, हमें पदचिह्न गणना मिलती है। यदि यह समान है, तो गुणन 0 में परिणाम करता है।

कुछ उदाहरण:

>> A=input('','s');~strcmp('test',A)*nnz(dec2bin(A)-48)
A

ans =

     2

>> A=input('','s');~strcmp('test',A)*nnz(dec2bin(A)-48)
O

ans =

     5

>> A=input('','s');~strcmp('test',A)*nnz(dec2bin(A)-48)
test

ans =

     0


>> A=input('','s');~strcmp('test',A)*nnz(dec2bin(A)-48)
  %// Note - no characters were added here.  Simply pushed Enter

ans =

     0

यदि आपको संचार उपकरण बॉक्स का उपयोग करने की अनुमति है, तो आप de2biइसके बजाय इसका उपयोग कर सकते हैं और -48इसे एक संख्यात्मक प्रकार (साथ ही फ़ंक्शन नाम में 2 अतिरिक्त वर्ण) में डालने से बच सकते हैं ।
बीकर

5

दे घुमा के 440 430 412 405 403

A=0
[ test != "$1" ]&&for((D=0;D<${#1};D++)){
A=$((A+`bc<<<$(printf "obase=2;%d" "'${1:$D:1}")|tr -d "0
"|wc -m`))
}
echo $A

बहुत सीधा। इनपुट में लूप्स वर्णों को पहले ascii में परिवर्तित किया जाता है ( printf %dऔर 'तब नंबर पर अग्रणी बाइनरी (साथ bc), शून्य को स्ट्रिप्स और वर्णों की संख्या को गिनता है।

एक महान जवाब नहीं है, लेकिन एक बकवास प्रयास अभी तक नहीं देखा था।

मेरे पहले उत्तर के बाद संशोधित किए गए इनपुट स्ट्रिंग को केवल कमांड लाइन पर दिए जाने की अनुमति दी गई है (यानी यह मल्टीपल इनपुट पैरम हो गया है अगर शब्दों को बढ़ाएं) लेकिन कुछ अन्य उत्तरों को पढ़ने के बाद मुझे लगता है कि मैं इसे उद्धृत कर सकता हूं, इसलिए पूरा स्ट्रिंग आता है। $1


1
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! 1. आप के doसाथ {और doneसाथ बदल सकते हैं }। 2. तुम भी चारों ओर रिक्त स्थान की जरूरत नहीं है <<<। 3. आप \nशाब्दिक लाइनफीड से बदल सकते हैं ।
डेनिस

धन्यवाद @ डेनिस। इस साइट की चुनौतियों में से एक "अच्छी आदतों" का एक गुच्छा है। :)
एडम

3
यह निश्चित है। यदि आप पहले से ही नहीं हैं, तो मैं आपको बैश में गोल्फिंग के लिए टिप्स की जांच करने की सलाह देता हूं । यह एक महान संसाधन है।
डेनिस

3
गोल्फ मानकों से भी यह चुनौती अजीब है! अतिरिक्त वर्ण अभी भी अंक बचा सकते हैं। का उपयोग करते हुए =और ||लागत 15 जबकि उपयोग !=और &&केवल 13 है! एक अतिरिक्त चरित्र लेकिन दो अंक बचाता है ...
एडम

5

सीलोन, 1431 , 764 , 697 , 571 , 547 , 538 , 501 , 493 , 467 , 451

shared void p(){print(sum{0,if(exists a=process.arguments[0])if(a!="test")for(c in a)for(b in 0..7)if(c.hash.get(b))1});}

यह मूल, असंयमी था:

Integer footprintCharacter(Integer b) {
    return sum({0, for(i in 0..7) if(b.get(i)) 1 });
}
Integer footPrintString(String s) {
    if(s == "test") {return 0;}
    return sum({0, for(c in s) footprintCharacter(c.integer)});
}
shared void footprint() {
     if(exists s = process.arguments[0]) {
         print(footPrintString(s));
     } else {
         print("This program needs at least one parameter!");
     }
}

यह एक कमांड लाइन पैरामीटर से तर्क लेता है ... process.arguments स्ट्रिंग्स का एक (संभवतः खाली) अनुक्रम है, इसलिए उनमें से किसी एक का उपयोग करने से पहले, हमें यह जांचने की आवश्यकता है कि क्या यह वास्तव में मौजूद है। दूसरे मामले में हम एक त्रुटि संदेश आउटपुट करते हैं (यह प्रश्न द्वारा आवश्यक नहीं है और अगले संस्करणों में फेंक दिया जाएगा)।

सीलोन का sumकार्य कुछ प्रकार के तत्वों का एक गैर-रिक्त Iterable लेता है Summable, जिसे संतुष्ट करने की आवश्यकता होती है , अर्थात एक plusविधि होती है, जैसे Integer। (यह खाली अनुक्रमों के साथ काम नहीं करता है क्योंकि प्रत्येक योग योग्य प्रकार का अपना शून्य होगा, और रनटाइम को यह जानने का कोई मौका नहीं है कि इसका मतलब क्या है।)

एक स्ट्रिंग के तत्व, या एक पूर्णांक के एक बिट, एक गैर-खाली चलने योग्य नहीं हैं। इसलिए हम यहां कुछ तत्वों को निर्दिष्ट करके पुनरावृत्त बनाने की सुविधा का उपयोग कर रहे हैं, फिर एक "समझ" (जिसका मूल्यांकन शून्य या अधिक तत्वों के लिए किया जाएगा)। इसलिए चरित्र के मामले में हम लोगों को जोड़ रहे हैं (लेकिन केवल जब संबंधित बिट सेट होता है), स्ट्रिंग मामले में हम वर्णों के परिणाम को जोड़ रहे हैं। (बोध का मूल्यांकन केवल तब किया जाएगा जब प्राप्त समारोह वास्तव में इसके बारे में पुनरावृत्त करता है, जब Iterable का निर्माण नहीं होता है।)

आइए देखें कि हम इसे कैसे छोटा कर सकते हैं। सबसे पहले, प्रत्येक फ़ंक्शन को केवल एक स्थान पर बुलाया जाता है, इसलिए हम उन्हें इनलाइन कर सकते हैं। इसके अलावा, जैसा कि ऊपर बताया गया है, त्रुटि संदेश से छुटकारा पाएं। (764 फुटप्रिंट अंक)

shared void footprint() {
    if (exists s = process.arguments[0]) {
        if (s == "test") {
            print(0);
        } else {
            print(sum({ 0, for (c in s) sum({ 0, for (i in 0..7) if (c.integer.get(i)) 1 }) }));
        }
    }
}

हमें वास्तव में आंतरिक नेस्टेड की आवश्यकता नहीं है sum, हम इसे एक बड़ी समझ बना सकते हैं। (यह हमें 37 फ़ुटप्रिंट पॉइंट्स के लिए बचाता है sum({0,}), और व्हॉट्सएप के लिए कुछ और, जो किसी भी तरह समाप्त हो जाएंगे।) यह 697 है:

shared void footprint() {
    if (exists s = process.arguments[0]) {
        if (s == "test") {
            print(0);
        } else {
            print(sum({ 0, for (c in s) for (i in 0..7) if (c.integer.get(i)) 1 }));
        }
    }
}

हम विशेष आवरण "test"स्ट्रिंग के लिए एक समान सिद्धांत लागू कर सकते हैं : जैसा कि उस स्थिति में परिणाम 0 है (अर्थात योग में कुछ भी योगदान नहीं है), हम इसे केवल योग के एक हिस्से के रूप में कर सकते हैं (लेकिन हमें स्थिति को उल्टा करना होगा) । यह मुख्य रूप से हमें बचाता है print(0);, कुछ ब्रेसिज़ और इंडेंटेशन रिक्त स्थान का एक गुच्छा, 571 के पदचिह्न तक नीचे आ रहा है:

shared void footprint() {
    if (exists s = process.arguments[0]) {
        print(sum({ 0, if (s != "test") for (c in s) for (i in 0..7) if (c.integer.get(i)) 1 }));
    }
}

हम पहले के लिए भी ऐसा ही करते हैं if, साइड इफ़ेक्ट के साथ कि अब बिना तर्क के भी 0कुछ नहीं करने के बजाय आउटपुट देता है । (कम से कम मैंने सोचा था कि यहाँ होगा, इसके बजाय यह एक अनन्त लूप के साथ लटका हुआ लगता है? अजीब।)

shared void footprint() {
    print(sum({ 0, if (exists s = process.arguments[0]) if (s != "test") for (c in s) for (i in 0..7) if (c.integer.get(i)) 1 }));
}

हम वास्तव में यहां फ़ंक्शन के ()लिए छोड़ सकते sumहैं, एक वैकल्पिक फ़ंक्शन कॉल सिंटैक्स का उपयोग कर सकते हैं, जो {...}इसके बजाय का उपयोग करता है (), और पुनरावृत्त तर्कों में समझ भर देगा। यह पदचिह्न 538 है:

shared void footprint() {
    print(sum{ 0, if (exists s = process.arguments[0]) if (s != "test") for (c in s) for (i in 0..7) if (c.integer.get(i)) 1 });
}

फ़ंक्शन नाम footprint(40) को p(3) से बदलकर अन्य 37 बिंदुओं को सहेजता है, जो हमें 501 तक पहुंचाता है। (सीलोन फ़ंक्शन नामों को कम केस वर्णों से शुरू करना पड़ता है, इसलिए हम यहां 3 अंक से कम नहीं प्राप्त कर सकते हैं।)

shared void p() {
    print(sum{ 0, if (exists s = process.arguments[0]) if (s != "test") for (c in s) for (i in 0..7) if (c.integer.get(i)) 1 });
}

चर नाम s(5) और c(4), i(4) भी इष्टतम नहीं हैं। आइए उन्हें a(तर्क), d(अंक?) b(बिट-इंडेक्स) द्वारा प्रतिस्थापित करें । पदचिह्न 493:

shared void p() {
    print(sum{ 0, if (exists a = process.arguments[0]) if (a != "test") for (c in a) for (b in 0..7) if (c.integer.get(b)) 1 });
}

मुझे कोई शेष नॉन-व्हॉट्सएप ऑप्टिमाइज़ेशन दिखाई नहीं देता है, इसलिए आइए गैर-आवश्यक व्हाट्सएप को हटा दें (प्रत्येक स्थान के लिए 1 बिंदु, प्रत्येक दो लाइन ब्रेक के लिए दो):

shared void p(){print(sum{0,if(exists a=process.arguments[0])if(a!="test")for(c in a)for(b in 0..7)if(c.integer.get(b))1});}

API ब्राउज़ करते समय, मैंने पाया कि Character.hash वास्तव में इसकी integerविशेषता के समान मूल्य देता है । लेकिन इसमें 30 के बजाय सिर्फ 14 अंक हैं, इसलिए हम 451 पर आ गए!

shared void p(){print(sum{0,if(exists a=process.arguments[0])if(a!="test")for(c in a)for(b in 0..7)if(c.hash.get(b))1});}

4

पॉवरशेल, 273 336 328 324 293 288 295

PARAM($A)[CHAR[]]$A|%{$D=[INT]$_;WHILE($D){$B+=$D-BAND0X1;$D=$D-SHR1}};($B,0)[$A-CEQ"test"]

संपादित करें - 'परीक्षण' के मामले को भूल गए ... इतना महंगा।

संपादित - एक UPPERCASE अवसर चूक गया।

संपादित सुझाव - टिप्पणी सुझावों को शामिल किया (धन्यवाद टिम्मीड)।

4 संपादित करें - D, C (2 बनाम 3) से सस्ता संस्करण है

5 संपादित करें - केस-सेंसिटिविटी चेक के कारण वापस 295।

स्ट्रिंग पर लूप्स और 1s को गिनता है जो कि ASCII मान के अक्षरों से हट जाता है।

अपरकेस वर्णों का उपयोग करने और अंत में सरणी सूचकांक का उपयोग करने के लिए मुझे दूरदर्शिता देने के लिए टिम्मीड को हैट-टिप।


1
अच्छा तरीका! गोल्फ के एक जोड़े ($ B आरंभीकरण को हटा दिया गया है, क्योंकि यह शून्य पर डिफ़ॉल्ट होगा, कुछ जोड़े को हटा दिया, कुछ अर्धविराम हटा दिए), इसे 293 तक नीचे लाता हैPARAM($A)[CHAR[]]$A|%{$C=[INT]$_;WHILE($C){$B+=$C-BAND0X1;$C=$C-SHR1}};($B,0)[$A-EQ"TEST"]
AdmBorkBork

जब मैं "नाइस अप्रोच" पढ़ता हूं तो इसका क्या मतलब है! और Wii गोल्फ से आवाज सुनी? संकेत के लिए धन्यवाद! पॉवरशेल कंसोल में इसका परीक्षण करने पर इनिशियलाइजेशन मुझे ट्रिप कर रहा था और मैंने इसे छोड़ दिया।
चालीस

हाँ - यदि आप कंसोल का उपयोग कर रहे हैं, तो यह बहुत अधिक REPL वातावरण है, इसमें असाइन किए गए चर एक पंक्ति से दूसरी पंक्ति तक बने रहते हैं। यदि आप इसे .ps1 के रूप में सहेजते हैं, तो $ B (और प्रत्येक अन्य चर) को पुनः आरंभ किया जाता है, भले ही आप एक ही शेल से ऊपर-तीर-दर्ज करें। जैसे,PS C:\scripts> .\ecological-footprint.ps1
AdmBorkBork

इनपुट के लिए गलत मान 0 देता है"TEST"
याकूब क्राल

1
281PARAM($A)(([CHAR[]]$A|%{$B=$_;0..9|?{[INT]$B-SHR$_-BAND1}}).LENGTH,0)[("TEST"-EQ$A)]
tomkandy


4

सी, 374

Newlines (स्कोर में शामिल नहीं) स्पष्टता के लिए जोड़ा गया। केवल बड़े नामों को अपरकेस में बदलकर 360 में सुधार किया जा सकता है, लेकिन मैं कुछ बेहतर सोचने की कोशिश करूंगा।

इनपुट कमांडलाइन के माध्यम से होता है, जिसका अर्थ है कि अनुपस्थित इनपुट पर यह अलग हो जाता है। मुझे स्टड के माध्यम से इनपुट के लिए एक बदतर स्कोर की उम्मीद है।

i,t;
main(int c,char**v){
for(;c=v[i][i/8];i++)t+=(c>>i%8)&1;
printf("%d",strcmp(v[1],"test")?t:0);
}

4

PHP, 377 337 299 पारिस्थितिक पदचिह्न (अभी भी बहुत कुछ) , 102 91 बाइट्स

लगता है कि PHP केवल टेस्ट-मोड में पर्यावरण के अनुकूल है। ;)

WHILE($D<STRLEN($A=$argv[1]))$B+=SUBSTR_COUNT(DECBIN(ORD($A[$D++])),1);ECHO"test"!=$A?$B:0;

कमांड लाइन से चलाता है जैसे:

php footprint.php hello
php footprint.php test

whileforभले ही वे समान वर्ण गणना साझा करते हों, लेकिन वे अधिक पर्यावरण के अनुकूल हैं । इसके अलावा अपरकेस वेरिएबल के नाम उनके लोअरकेस समकक्षों की तुलना में बेहतर हैं।

संपादित करें

  • अपरकेस फ़ंक्शन नामों का उपयोग करके 40 अंक सहेजे गए।
  • के decbinबजाय का उपयोग करके 38 अंक बचायाbase_convert

1
@ एडडम यहां नोटिस के बारे में चर्चा की गई है और यहां PHP खोलने के टैग के बारे में बताया गया है । आशा है कि यह आपके लिए उपयोगी है।
सम्मिलित

4

VBA, 475 418

धन्यवाद जैकब 57 अंक के लिए

  • बाइट अरेंज करने के लिए स्ट्रिंग को धर्मान्तरित करता है (128 के लिए vba शॉर्टकट है "स्ट्रिंग को यूनिकोड से सिस्टम के डिफ़ॉल्ट कोड पेज में परिवर्तित करता है" इसलिए मैक पर काम नहीं करेगा ...)

  • लूप्स हालांकि बाइट सरणी बाइनरी में परिवर्तित हो रही है और एक साथ सब कुछ समेट रही है।

  • परीक्षण के लिए जाँच
  • सभी 0 के साथ स्ट्रिंग की लंबाई प्रिंट के साथ कुछ भी नहीं है

VBA आप गोल्फ में इतने खराब क्यों हैं ... :(

SUB A(D)
DIM B() AS BYTE
B=STRCONV(D,128)
FOR P=0 TO UBOUND(B)
H=H+APPLICATION.DEC2BIN(B(P))
NEXT
IF D="test" THEN H=0
MSGBOX LEN(REPLACE(H,0,""))
ENDSUB

4
VBA केस-असंवेदनशील है, इसलिए आपको प्रत्येक बिंदु को लोअरकेस वर्ण को बचाने के लिए हर जगह अपरकेस का उपयोग करना चाहिए! ( "test"पाठ्यक्रम को छोड़कर )
याकूब क्राल

4

जावास्क्रिप्ट, 418 410

A=prompt();B=0;!A||A=="test"?0:A.split("").forEach(D=>B+=D.charCodeAt().toString(2).match(/1/g).length);alert(B)

डबल कोट " 00100010सिंगल कोट की तुलना में अधिक पर्यावरण के अनुकूल है ' 00100111
याकूब क्राल

3

अजगर, ६४

?qz"test"0l`sS.Bz

जाँचता है कि इनपुट परीक्षण है और यदि नहीं, तो इनपुट के बाइनरी प्रतिनिधित्व में 1 की संख्या गिना जाता है।


3

हास्केल, 292

a 0=0
a b=rem b 2+a(div b 2)
b"test"=0
b d=sum$map(a.fromEnum)d
main=interact$show.b

यहां कहने के लिए ज्यादा कुछ नहीं: हर चरित्र को अस्सी मूल्य ( fromEnum) में बदल दें और 1एस (के माध्यम से a) की गणना करें । सभी परिणामों का योग।


3

जावास्क्रिप्ट (ईएस 6), 521 478 458 449 473 465

alert(((A=prompt(),A!="test")&&(A!=""))?(A.split``.map(H=>(H.charCodeAt().toString(2).match(/1/g)||[]).length)).reduce((A,B)=>A+B):0)

यह एक जावास्क्रिप्ट गोल्फ में मेरा पहला प्रयास है, इसलिए यह शायद बहुत ही अनगढ़ है।


यह आमतौर पर इस बात पर सहमत है कि जावास्क्रिप्ट गोल्फ को निहितार्थ के अलावा अन्य किसी प्रकार के आउटपुट की आवश्यकता है। यह एक अलर्ट, डॉक्यूमेंट.राइट, या यहां तक ​​कि एक फ़ंक्शन रिटर्न हो सकता है।
मौर्य 247

आप अपने प्रॉम्प्ट असाइनमेंट को पहले स्टेटमेंट में ले जा सकते हैं, अगर स्टेटमेंट में, कोष्ठक से घिरा हुआ है, तो युगल बाइट्स को बचाने के लिए। आप charCodeAt में '0' भी निकाल सकते हैं। इसके अलावा, एक बड़ी बचत जो आप कर सकते हैं, अगर / नहीं तो बयानों के बजाय टर्नरी ऑपरेटर का उपयोग कर रहे हैं =)
Mwr247

आपका बहुत बहुत धन्यवाद! मैंने शीघ्र कार्यभार के लिए पालन-पोषण के बजाय अल्पविराम का उपयोग किया, हालांकि; यह एक और बाइट बचाता है। (: @ Mwr247
Zach Gates

s.split ('') इसके बजाय s.split`` हो सकता है, जिससे 2 बाइट बचती हैं
Dendrobium

1
प्रति डेंड्रोबियम की टिप्पणी के ऊपर @ जेकॉब क्राल
जैच गेट्स

3

रूबी, 316 313

बहुत सरल, कुछ और गोल्फिंग संभावनाओं की तलाश में:

b=gets.chomp;b=='test'?0:b.chars.map{|i|i.ord.to_s(2).count('1')}.inject(:+)
  • के bबजाय x3 अंक बचाने के लिए इस्तेमाल किया ।

आप $*[0]इसके बजाय gets.chomp(कमांड लाइन तर्क के रूप में इनपुट ले सकते हैं) का उपयोग कर सकते हैं
Mhmd

डबल कोट " 00100010सिंगल कोट की तुलना में अधिक पर्यावरण के अनुकूल है ' 00100111
याकूब क्राल

अपरकेस वैरिएबल नाम समतुल लोअरकेस की तुलना में अधिक पर्यावरण के अनुकूल हैं। उसी कारण Hसे बेहतर है I
याकूब क्राल

3

पायथन 2, 294 281 269 266

A=input()
print sum(format(ord(H),"b").count("1")for H in A)if A!="test"else 0

मेरे पायथ उत्तर का एक पोर्ट, ऊपर।

इनपुट एक स्ट्रिंग के रूप में प्राप्त होता है (उद्धरण के साथ):

"ABC"

1
डबल कोट " 00100010सिंगल कोट की तुलना में अधिक पर्यावरण के अनुकूल है ' 00100111
याकूब क्राल

एक जोड़े को बुनियादी संशोधनों के लिए नीचे इस मिल A=input();print[sum(bin(ord(H)).count("1")for H in A),0][A=="test"]की 243 स्कोर के साथ
Kade


2

पायथ, 96

Iqz"test"0.q)/j""m.BdmCdz\1

मेरे CJam उत्तर का एक पोर्ट, ऊपर / नीचे।


बस कुछ पाइथ सामान्य नोट्स: इसके बजाय Iटर्नरी का उपयोग करने की कोशिश करें ?, लेकिन इस मामले में चूंकि यह एक बूल है जिसे आप बस उपयोग कर सकते हैं *( nइसके बजाय स्विच करने के बाद q), kस्वचालित रूप से ""और sतार पर एक ही है jk। आशा है कि आप मज़ा सीखने अजगर है! :)
FryAmTheEggman

यह मेरा पहला पाइथ उत्तर था: P यह काफी कठिन था, हाहा, मस्ती हालांकि। सुझावों के लिए धन्यवाद! @FryAmTheEggman
Zach गेट्स

2

सीजाम, 83 81 79 77

कई विविधताओं को आजमाने के बाद अब तक का सर्वश्रेष्ठ:

l0$"test"=!\:i2fbe_1b*

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

स्पष्टीकरण:

l       Get input. Other options like q and r are the same number of bits.
0$      Copy input for comparison. This saves 2 bits over _.
"test"  Push special case string.
=       Compare.
!       Negate so that we have 0 for special case, 1 for normal case.
\       Swap input string to top.
:i      Convert characters to integers.
2fb     Apply conversion to base 2 to all values.
e_      Flatten array.
1b      Sum up the bits. This is 2 bits shorter than :+.
*       Multiply with result from special case test.

2

रूबी, 247

प्रत्येक बाइट में इनपुट के सभी बाइट्स और सभी बिट्स के माध्यम से सीधा दृष्टिकोण लूपिंग, चर के लिए संक्षेप d

d-2 को इनिशियलाइज़ किया जाता है क्योंकि hइनपुट से टर्मिनेटिंग न्यूलाइन (2 बिट्स की कीमत) होती है और हम इसे गिनना नहीं चाहते।

इसी तरह एक अनुगामी न्यूलाइन के साथ hहोगा test, इसलिए एक नईलाइन को तुलना मूल्य में शामिल किया जाना चाहिए।

d=-2
h=gets
h.bytes{|a|8.times{|b|d+=a>>b&1}}
p h=='test
'?0:d

2

आर, 279

sum(as.integer(rawToBits(charToRaw(if((s=readline())=='test')''else s))))

सुंदर आत्म व्याख्यात्मक।
टेस्ट:

> sum(as.integer(rawToBits(charToRaw(if((s=readline())=='test')''else s))))
sum(as.integer(rawToBits(charToRaw(if((s=readline())=='test')''else s))))
[1] 279
> sum(as.integer(rawToBits(charToRaw(if((s=readline())=='test')''else s))))
A
[1] 2
> sum(as.integer(rawToBits(charToRaw(if((s=readline())=='test')''else s))))
O
[1] 5
> sum(as.integer(rawToBits(charToRaw(if((s=readline())=='test')''else s))))
test
[1] 0
> sum(as.integer(rawToBits(charToRaw(if((s=readline())=='test')''else s))))
OAO
[1] 12

2

सी, 378 फुटप्रिंट, 98 बाइट्स

एक और सी समाधान:

s;main(c,a)char**a;{for(s=-17*!strcmp(a[1],"test");c=*a[1]++;)for(;c;s+=c&1,c/=2);printf("%d",s);}

जिस तरह से यह काम करता है कि s को आमतौर पर 0 से शुरू किया जाता है, लेकिन अगर -17 हो जाता है यदि कमांड-लाइन तर्क "टेस्ट" है (स्ट्रैम्पम्प 0 बराबर स्ट्रिंग्स पर, और नॉन-जीरो अलग-अलग स्ट्रिंग्स पर है, इसलिए इनवर्ट करने से यह 1 स्ट्रिंग हो जाता है) "परीक्षण" है)। संख्या -17 को 17 के पदचिह्न की भरपाई करने के लिए चुना गया था जिसकी गणना "परीक्षण" के लिए की जाएगी। बिटकॉइन ऑपरेटरों के साथ पदचिह्न की गणना आसान है।

स्नैप! मैं शुरू में "सबसे छोटा पदचिह्न जीत" से चूक गया था इसलिए मैं सबसे छोटे कोड का लक्ष्य बना रहा था ... मैं देखूंगा कि क्या मैं "पदचिह्न" को छोटा बना सकता हूं।


2

जावा, 594

class A{public static void main(String[]P){Integer D,H;for(D=H=0;D<P[0].length();)H+=D.bitCount(P[0].charAt(D++));System.out.print(P[0].equals("test")?0:H);}}

जावा बहुत हरा नहीं है।

Ungolfed संस्करण:

class A {
    public static void main(String[]P) {
        Integer D,H;
        for(D=H=0;D<P[0].length();)
            H+=D.bitCount(P[0].charAt(D++));
        System.out.print(P[0].equals("test")?0:H);
    }
}

DIntegerइसलिए घोषित किया जाता है ताकि हम पर्यावरणीय रूप से कर्तव्यनिष्ठ तरीके से Integerस्थैतिक bitCountपद्धति का उपयोग कर सकें । bitCountविधि व्यवहार करता है charपूर्णांक के रूप में है और सेट बिट्स की संख्या देता है।


1
दिलचस्प है जावा की सीलोन के साथ तुलना ... जावा में बॉयलरप्लेट, और एक लंबी प्रिंट स्टेटमेंट के कारण कुछ ओवरहेड है। बिटकॉइन मदद करता है, हालांकि, सीलोन के पास यह नहीं है। सीलोन के पास कमांड लाइन के मापदंडों तक पहुंचने का एक लंबा रास्ता है, और यह भी जांचने की ज़रूरत है कि क्या वे वास्तव में दिए गए हैं (जहां आपका प्रोग्राम केवल एक ArrayIndexOutOfBoundsException फेंक देगा)। सीलोन का योग फ़ंक्शन निश्चित रूप से इसे सीलोन में मैन्युअल रूप से जोड़ने से कम है (लेकिन जावा में कोई भी समझ नहीं है, इसलिए मैन्युअल रूप से जोड़ना एक Iterable के निर्माण से बेहतर है)।
पाओलो एबरमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.